Then, (1) <=> (A*Cos-X,B*Sin-Y).(-A*Sin,B*Cos) = 0.
(B**2-A**2)*Cos*Sin - B*Y*Cos + A*X*Sin = 0.
Use algorithm math_TrigonometricFunctionRoots to solve this equation.
+
+ Addition:
+ In case, when MajorRadius == MinorRadius calcualtion errors may occur
+ This case should be processed as Circle
-----------------------------------------------------------------------------*/
{
myDone = Standard_False;
gp_Vec Trsl = Axe.Multiplied(-(gp_Vec(O,P).Dot(Axe)));
gp_Pnt Pp = P.Translated(Trsl);
+ if (Abs(C.MajorRadius() - C.MinorRadius() < Precision::Confusion()))
+ {
+ Perform(P, gp_Circ(gp_Ax2(O, C.Axis().Direction()), C.MajorRadius()), Tol, Uinf, Usup);
+ return;
+ }
+
// 2- Calculation of solutions ...
Standard_Integer NoSol, NbSol;
--- /dev/null
+puts "================================================================="
+puts "0033418: Modeling Algorithms - BRepExtrema_DistShapeShape wrong arc ellipse - point result"
+puts "================================================================="
+puts ""
+
+ellipse el 0 0 0 0 1 0 1 1
+trim el el 4.71238898038 1.57079632679
+mkedge el el
+vertex v 0 0 1.5
+distmini d el v
+if {[dval d_val] > 0.5000001} {
+ puts "ERROR: Wrong distance calculation"
+}