1 // File: Geom2d_Hyperbola.cxx
2 // Created: Wed Mar 24 19:22:55 1993
5 // Copyright: Matra Datavision 1993
7 //File Geom2d_Hyperbola.cxx, JCV 17/01/91
9 #include <Geom2d_Hyperbola.ixx>
11 #include <Precision.hxx>
13 #include <gp_Dir2d.hxx>
16 #include <Standard_ConstructionError.hxx>
17 #include <Standard_DomainError.hxx>
18 #include <Standard_RangeError.hxx>
22 typedef Geom2d_Hyperbola Hyperbola;
23 typedef Handle(Geom2d_Hyperbola) Handle(Hyperbola);
25 typedef gp_Dir2d Dir2d;
26 typedef gp_Pnt2d Pnt2d;
27 typedef gp_Vec2d Vec2d;
28 typedef gp_Trsf2d Trsf2d;
35 //=======================================================================
38 //=======================================================================
40 Handle(Geom2d_Geometry) Geom2d_Hyperbola::Copy() const
43 H = new Hyperbola (pos, majorRadius, minorRadius);
49 //=======================================================================
50 //function : Geom2d_Hyperbola
52 //=======================================================================
54 Geom2d_Hyperbola::Geom2d_Hyperbola (const gp_Hypr2d& H)
56 majorRadius = H.MajorRadius();
57 minorRadius = H.MinorRadius();
62 //=======================================================================
63 //function : Geom2d_Hyperbola
65 //=======================================================================
67 Geom2d_Hyperbola::Geom2d_Hyperbola (const Ax2d& A,
68 const Standard_Real MajorRadius,
69 const Standard_Real MinorRadius,
70 const Standard_Boolean Sense)
71 : majorRadius (MajorRadius), minorRadius (MinorRadius)
73 if( MajorRadius < 0.0|| MinorRadius < 0.0)
74 Standard_ConstructionError::Raise();
75 pos = gp_Ax22d(A, Sense);
78 //=======================================================================
79 //function : Geom2d_Hyperbola
81 //=======================================================================
83 Geom2d_Hyperbola::Geom2d_Hyperbola (const gp_Ax22d& Axis,
84 const Standard_Real MajorRadius,
85 const Standard_Real MinorRadius)
86 : majorRadius (MajorRadius), minorRadius (MinorRadius)
88 if( MajorRadius < 0.0|| MinorRadius < 0.0)
89 Standard_ConstructionError::Raise();
94 //=======================================================================
95 //function : SetHypr2d
97 //=======================================================================
99 void Geom2d_Hyperbola::SetHypr2d (const gp_Hypr2d& H)
101 majorRadius = H.MajorRadius();
102 minorRadius = H.MinorRadius();
107 //=======================================================================
108 //function : SetMajorRadius
110 //=======================================================================
112 void Geom2d_Hyperbola::SetMajorRadius (const Standard_Real MajorRadius)
114 if (MajorRadius < 0.0)
115 Standard_ConstructionError::Raise();
117 majorRadius = MajorRadius;
121 //=======================================================================
122 //function : SetMinorRadius
124 //=======================================================================
126 void Geom2d_Hyperbola::SetMinorRadius (const Standard_Real MinorRadius)
128 if (MinorRadius < 0.0 )
129 Standard_ConstructionError::Raise();
131 minorRadius = MinorRadius;
135 //=======================================================================
138 //=======================================================================
140 gp_Hypr2d Geom2d_Hyperbola::Hypr2d () const
142 return gp_Hypr2d (pos, majorRadius, minorRadius);
146 //=======================================================================
147 //function : ReversedParameter
149 //=======================================================================
151 Standard_Real Geom2d_Hyperbola::ReversedParameter( const Standard_Real U) const
156 //=======================================================================
157 //function : FirstParameter
159 //=======================================================================
161 Standard_Real Geom2d_Hyperbola::FirstParameter () const
163 return -Precision::Infinite();
166 //=======================================================================
167 //function : LastParameter
169 //=======================================================================
171 Standard_Real Geom2d_Hyperbola::LastParameter () const
173 return Precision::Infinite();
176 //=======================================================================
177 //function : IsClosed
179 //=======================================================================
181 Standard_Boolean Geom2d_Hyperbola::IsClosed () const
183 return Standard_False;
186 //=======================================================================
187 //function : IsPeriodic
189 //=======================================================================
191 Standard_Boolean Geom2d_Hyperbola::IsPeriodic () const
193 return Standard_False;
196 //=======================================================================
197 //function : Asymptote1
199 //=======================================================================
201 Ax2d Geom2d_Hyperbola::Asymptote1 () const
203 gp_Hypr2d Hv (pos, majorRadius, minorRadius);
204 return Hv.Asymptote1();
207 //=======================================================================
208 //function : Asymptote2
210 //=======================================================================
212 Ax2d Geom2d_Hyperbola::Asymptote2 () const
214 gp_Hypr2d Hv (pos, majorRadius, minorRadius);
215 return Hv.Asymptote2();
218 //=======================================================================
219 //function : ConjugateBranch1
221 //=======================================================================
223 gp_Hypr2d Geom2d_Hyperbola::ConjugateBranch1 () const
225 gp_Hypr2d Hv (pos, majorRadius, minorRadius);
226 return Hv.ConjugateBranch1 ();
229 //=======================================================================
230 //function : ConjugateBranch2
232 //=======================================================================
234 gp_Hypr2d Geom2d_Hyperbola::ConjugateBranch2 () const
236 gp_Hypr2d Hv (pos, majorRadius, minorRadius);
237 return Hv.ConjugateBranch2 ();
240 //=======================================================================
241 //function : Directrix1
243 //=======================================================================
245 Ax2d Geom2d_Hyperbola::Directrix1 () const
247 gp_Hypr2d Hv (pos, majorRadius, minorRadius);
248 return Hv.Directrix1 ();
251 //=======================================================================
252 //function : Directrix2
254 //=======================================================================
256 Ax2d Geom2d_Hyperbola::Directrix2 () const
258 gp_Hypr2d Hv (pos, majorRadius, minorRadius);
259 return Hv.Directrix2 ();
262 //=======================================================================
263 //function : Eccentricity
265 //=======================================================================
267 Standard_Real Geom2d_Hyperbola::Eccentricity () const
269 Standard_DomainError_Raise_if (majorRadius <= gp::Resolution(), " ");
271 (Sqrt(majorRadius*majorRadius+minorRadius*minorRadius))/majorRadius;
274 //=======================================================================
277 //=======================================================================
279 Standard_Real Geom2d_Hyperbola::Focal () const
281 return 2.0 * Sqrt(majorRadius * majorRadius + minorRadius * minorRadius);
284 //=======================================================================
287 //=======================================================================
289 Pnt2d Geom2d_Hyperbola::Focus1 () const
291 Standard_Real C = Sqrt(majorRadius * majorRadius + minorRadius * minorRadius);
292 XY Pxy = pos.XDirection().XY();
294 Pxy.Add (pos.Location().XY());
298 //=======================================================================
301 //=======================================================================
303 Pnt2d Geom2d_Hyperbola::Focus2 () const
305 Standard_Real C = Sqrt(majorRadius * majorRadius + minorRadius * minorRadius);
306 XY Pxy = pos.XDirection().XY();
308 Pxy.Add (pos.Location().XY());
312 //=======================================================================
313 //function : MajorRadius
315 //=======================================================================
317 Standard_Real Geom2d_Hyperbola::MajorRadius () const
322 //=======================================================================
323 //function : MinorRadius
325 //=======================================================================
327 Standard_Real Geom2d_Hyperbola::MinorRadius () const
332 //=======================================================================
333 //function : OtherBranch
335 //=======================================================================
337 gp_Hypr2d Geom2d_Hyperbola::OtherBranch () const
339 gp_Hypr2d Hv (pos, majorRadius, minorRadius);
340 return Hv.OtherBranch ();
344 //=======================================================================
345 //function : Parameter
347 //=======================================================================
349 Standard_Real Geom2d_Hyperbola::Parameter () const
351 Standard_DomainError_Raise_if (majorRadius <= gp::Resolution(), " ");
352 return (minorRadius * minorRadius) / majorRadius;
355 //=======================================================================
358 //=======================================================================
360 void Geom2d_Hyperbola::D0 (const Standard_Real U,
363 P = ElCLib::HyperbolaValue (U, pos, majorRadius, minorRadius);
366 //=======================================================================
369 //=======================================================================
371 void Geom2d_Hyperbola::D1 (const Standard_Real U,
375 ElCLib::HyperbolaD1 (U, pos, majorRadius, minorRadius, P, V1);
379 //=======================================================================
382 //=======================================================================
384 void Geom2d_Hyperbola::D2 (const Standard_Real U,
386 Vec2d& V1, Vec2d& V2) const
388 ElCLib::HyperbolaD2 (U, pos, majorRadius, minorRadius, P, V1, V2);
392 //=======================================================================
395 //=======================================================================
397 void Geom2d_Hyperbola::D3 (const Standard_Real U,
399 Vec2d& V1, Vec2d& V2, Vec2d& V3) const
401 ElCLib::HyperbolaD3 (U, pos, majorRadius, minorRadius, P, V1, V2, V3);
405 //=======================================================================
408 //=======================================================================
410 Vec2d Geom2d_Hyperbola::DN (const Standard_Real U, const Standard_Integer N) const
412 Standard_RangeError_Raise_if (N < 1, " ");
413 return ElCLib::HyperbolaDN (U, pos, majorRadius, minorRadius, N);
417 //=======================================================================
418 //function : Transform
420 //=======================================================================
422 void Geom2d_Hyperbola::Transform (const Trsf2d& T)
424 majorRadius = majorRadius * Abs (T.ScaleFactor());
425 minorRadius = minorRadius * Abs (T.ScaleFactor());