0022904: Clean up sccsid variables
[occt.git] / src / Expr / Expr_Cosine.cxx
1 // Copyright:   Matra-Datavision 1991
2 // File:        Expr_Cosine.cxx
3 // Created:     Mon May 27 17:24:38 1991
4 // Author:      Arnaud BOUZY
5 //              <adn>
6
7 #include <Expr_Cosine.ixx>
8 #include <Expr_NumericValue.hxx>
9 #include <Expr_ArcCosine.hxx>
10 #include <Expr_Sine.hxx>
11 #include <Expr_UnaryMinus.hxx>
12 #include <Expr_Product.hxx>
13 #include <Expr_Operators.hxx>
14 #include <Expr.hxx>
15
16 Expr_Cosine::Expr_Cosine(const Handle(Expr_GeneralExpression)& exp)
17 {
18   CreateOperand(exp);
19 }
20
21 Handle(Expr_GeneralExpression) Expr_Cosine::ShallowSimplified () const
22 {
23   Handle(Expr_GeneralExpression) myexp = Operand();
24   if (myexp->IsKind(STANDARD_TYPE(Expr_NumericValue))) {
25     Handle(Expr_NumericValue) myNVexp = Handle(Expr_NumericValue)::DownCast(myexp);
26     return new Expr_NumericValue(Cos(myNVexp->GetValue()));
27   }
28   if (myexp->IsKind(STANDARD_TYPE(Expr_ArcCosine))) {
29     return myexp->SubExpression(1);
30   }
31   Handle(Expr_Cosine) me = this;
32   return me;
33 }
34
35 Handle(Expr_GeneralExpression) Expr_Cosine::Copy () const
36 {
37   return new Expr_Cosine(Expr::CopyShare(Operand()));
38 }
39
40 Standard_Boolean Expr_Cosine::IsIdentical (const Handle(Expr_GeneralExpression)& Other) const
41 {
42   if (Other->IsKind(STANDARD_TYPE(Expr_Cosine))) {
43     Handle(Expr_GeneralExpression) myexp = Operand();
44     return myexp->IsIdentical(Other->SubExpression(1));
45   }
46   return Standard_False;
47 }
48
49 Standard_Boolean Expr_Cosine::IsLinear () const
50 {
51   return !ContainsUnknowns();
52 }
53
54 Handle(Expr_GeneralExpression) Expr_Cosine::Derivative (const Handle(Expr_NamedUnknown)& X) const
55 {
56   if (!Contains(X)) {
57     return new Expr_NumericValue(0.0);
58   }
59   Handle(Expr_GeneralExpression) myexp = Operand();
60   Handle(Expr_GeneralExpression) myder = myexp->Derivative(X);
61   Handle(Expr_Sine) firstder = new Expr_Sine(Expr::CopyShare(myexp));
62   Handle(Expr_UnaryMinus) fder = - (firstder->ShallowSimplified());
63   Handle(Expr_Product) resu = fder->ShallowSimplified() * myder;
64   return resu->ShallowSimplified();
65 }
66
67 Standard_Real Expr_Cosine::Evaluate(const Expr_Array1OfNamedUnknown& vars, const TColStd_Array1OfReal& vals) const
68 {
69   return ::Cos(Operand()->Evaluate(vars,vals));
70 }
71
72 TCollection_AsciiString Expr_Cosine::String() const
73 {
74   TCollection_AsciiString str("Cos(");
75   str += Operand()->String();
76   str += ")";
77   return str;
78 }