summaryrefslogtreecommitdiff
path: root/src/CSLib/CSLib_NormalPolyDef.cxx
blob: 69f3be083d4246eff972ab40d5474f651e6ed896 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
// File:	SingularityAna_PolyStyle.cxx
// Created:	Fri Aug 23 11:00:24 1996
// Author:	Benoit TANNIOU
//		<bt1@sgi65>


#include <CSLib_NormalPolyDef.ixx>
#include <PLib.hxx>

//=============================================================================
CSLib_NormalPolyDef::CSLib_NormalPolyDef(const Standard_Integer k0,
						const TColStd_Array1OfReal& li)
//=============================================================================
 :myTABli(0,k0)
{
  myK0=k0;
  for(Standard_Integer i=0;i<=k0;i++)
    myTABli(i)=li(i);
}

//=============================================================================
Standard_Boolean CSLib_NormalPolyDef::Value(const Standard_Real X,
						 Standard_Real& F)
//=============================================================================
{
  F=0.0;
  Standard_Real co,si;
  co=cos(X);
  si=sin(X);
  PLib::Binomial(myK0);

  for(Standard_Integer i=0;i<=myK0;i++){
    F=F+PLib::Bin(myK0,i)*pow(co,i)*pow(si,(myK0-i))*myTABli(i);
  }
  return Standard_True;
}

//=============================================================================
Standard_Boolean CSLib_NormalPolyDef::Derivative(const Standard_Real X,
						      Standard_Real& D)
//=============================================================================
{
  D=0.0;
  Standard_Real co,si;
  co=cos(X);
  si=sin(X);
  for(Standard_Integer i=0;i<=myK0;i++){
    D=D+PLib::Bin(myK0,i)*pow(co,(i-1))*pow(si,(myK0-i-1))*(myK0*co*co-i);
  }
  return Standard_True;
}

//=============================================================================
Standard_Boolean CSLib_NormalPolyDef::Values(const Standard_Real X,
						  Standard_Real& F,
						  Standard_Real& D)
//=============================================================================
{
  F=0;
  D=0;
  Standard_Real co,si;
  co=cos(X);
  si=sin(X);
  for(Standard_Integer i=0;i<=myK0;i++){
    F=F+PLib::Bin(myK0,i)*pow(co,i)*pow(si,(myK0-i))*myTABli(i);
    D=D+PLib::Bin(myK0,i)*pow(co,(i-1))*
        pow(si,(myK0-i-1))*(myK0*co*co-i)*myTABli(i);
   }
  return Standard_True;
}