7fd59977 |
1 | // File: Bisector_FunctionH.cxx |
2 | // Created: Tue Apr 5 14:33:16 1994 |
3 | // Author: Yves FRICAUD |
4 | // <yfr@phylox> |
5 | |
6 | |
7 | #include <Bisector_FunctionH.ixx> |
8 | #include <Geom2d_Curve.hxx> |
9 | |
10 | //============================================================================= |
11 | //function : |
12 | // purpose : |
13 | //============================================================================= |
14 | Bisector_FunctionH::Bisector_FunctionH (const Handle(Geom2d_Curve)& C2, |
15 | const gp_Pnt2d& P1, |
16 | const gp_Vec2d& T1) |
17 | :p1(P1),t1(T1) |
18 | { |
19 | t1.Normalize(); |
20 | curve2 = C2; |
21 | } |
22 | |
23 | //============================================================================= |
24 | //function : Value |
25 | // purpose : |
26 | // F = P1P2.(||T2||T1 + T2) |
27 | //============================================================================= |
28 | Standard_Boolean Bisector_FunctionH::Value (const Standard_Real X, |
29 | Standard_Real& F) |
30 | { |
31 | gp_Pnt2d P2 ; // point sur C2. |
32 | gp_Vec2d T2 ; // tangente a C2 en V. |
33 | curve2->D1(X,P2,T2); |
34 | |
35 | Standard_Real NormT2 = T2.Magnitude(); |
36 | Standard_Real Ax = NormT2*t1.X() - T2.X(); |
37 | Standard_Real Ay = NormT2*t1.Y() - T2.Y(); |
38 | |
39 | F = (p1.X() - P2.X())*Ax + (p1.Y() - P2.Y())*Ay; |
40 | |
41 | return Standard_True; |
42 | } |
43 | |
44 | //============================================================================= |
45 | //function : Derivative |
46 | // purpose : |
47 | //============================================================================= |
48 | Standard_Boolean Bisector_FunctionH::Derivative(const Standard_Real X, |
49 | Standard_Real& D) |
50 | { |
51 | Standard_Real F; |
52 | return Values (X,F,D); |
53 | } |
54 | |
55 | //============================================================================= |
56 | //function : Values |
57 | // purpose : |
58 | //============================================================================= |
59 | Standard_Boolean Bisector_FunctionH::Values (const Standard_Real X, |
60 | Standard_Real& F, |
61 | Standard_Real& D) |
62 | { |
63 | gp_Pnt2d P2 ; // point sur C2. |
64 | gp_Vec2d T2 ; // tangente a C2 en V. |
65 | gp_Vec2d T2v ; // derivee seconde a C2 en V. |
66 | |
67 | curve2->D2(X,P2,T2,T2v); |
68 | |
69 | Standard_Real NormT2 = T2.Magnitude(); |
70 | Standard_Real Ax = NormT2*t1.X() - T2.X(); |
71 | Standard_Real Ay = NormT2*t1.Y() - T2.Y(); |
72 | |
73 | F = (p1.X() - P2.X())*Ax + (p1.Y() - P2.Y())*Ay; |
74 | |
75 | Standard_Real Scal = T2.Dot(T2v)/NormT2; |
76 | Standard_Real dAx = Scal*t1.X() - T2v.X(); |
77 | Standard_Real dAy = Scal*t1.Y() - T2v.Y(); |
78 | |
79 | D = - T2.X()*Ax - T2.Y()*Ay + (p1.X() - P2.X())*dAx + (p1.Y() - P2.Y())*dAy; |
80 | |
81 | |
82 | return Standard_True; |
83 | |
84 | } |
85 | |