How to calculate S1 and S2 for creating a Hyperbola?

Hi All,

Please help me with this issue, I am unable to create a correct Hyperbola with the following data.

Centre(-14.6000003815, -7.0000000000, 0.0000000000)
X-Axis(1.0000000000, 0.0000000000, 0.0000000000)
Y-Axis(0.0000000000, -0.0000000000, 1.0000000000)
Major Radius = 2.8000000000
Minor Radius = 7.0000000000

Or please tell me how to calculate gp_Ax2 with the above information.

Any help will be very useful. Thanks

Sharad Verma's picture

I am using this function
gce_MakeHypr(const gp_Pnt &S1, const gp_Pnt &S2, const gp_Pnt &Center);

I tried to use
gce_MakeHypr (const gp_Ax2 &A2, const Standard_Real MajorRadius, const Standard_Real MinorRadius);

But unable to calcuate main Axis i.e gp_Ax2, thats why my hyperbola comes at a different position.

Please Help.

Sharad Verma's picture

I tried lots of possible combinations, but unable to create S1 and S2 points at exact location i want.

Or correct gp_Ax2?

Somebody please help.

George Feng's picture

gp_Ax2 aBAx(gp_Pnt(-14.6000003815, -7.0, 0.0) , - gp::DY() , gp::DX());
Standard_Real MajorRadius = 2.8;
Standard_Real MinorRadius = 7.0;
gp_Hypr a_gpHyperbola (aBAx, MajorRadius, MinorRadius);

Is that right?

Sharad Verma's picture

Thanks George,

For the above case it is working fine but for these following cases the result are not correct:

(1) Centre(-30.7500000000, 0.0000000000, -20.0000000000)
X-Axis(1.0000000000, -0.0000000000, 0.0000000000)
Y-Axis(0.0000000000, 1.0000000000, -0.0000000000)
Major Radius = 25.0000000000
Minor Radius = 20.0000000000

(2) Centre(13.3333330154, 0.0000000000, -20.0000000000)
X-Axis(-1.0000000000, 0.0000000000, 0.0000000000)
Y-Axis(0.0000000000, -1.0000000000, 0.0000000000)
Major Radius = 13.3330000000
Minor Radius = 20.0000000000

(3) Centre(-14.9998836517 -14.9998455048 -7.8000001907)
X-Axis(-0.7071073474 -0.7071062149 0.0000000000)
Y-Axis(-0.7071062149 0.7071073474 0.0000000000)
Major Radius = 5.7979699962
Minor Radius = 4.0472620361

please tell me, how you choose gp::DY() and gp::DX()? Any help will be very useful, I am new to Geometry and being a Computer Science guy it becomes a little bit problematic working with Geometry.

Thanks in Advacnce.. :)