myE3 = - maxLength * myTol / 4;
// Compure start point.
- math_Vector aPnt(1,2);
+ math_Vector aPnt(1,myN);
for(i = 1; i <= myN; i++)
{
Standard_Real currCentral = (myA(i) + myB(i)) / 2.0;
aPnt(i) = currCentral;
- myY.Append(currCentral);
}
myFunc->Value(aPnt, myF);
+
+ math_Vector aExtremumPoint(1,myN);
+ Standard_Real aExtremumValue = RealLast();
+ if (computeLocalExtremum(aPnt, aExtremumValue, aExtremumPoint))
+ {
+ // Local Extremum finds better solution than midpoint.
+ if (aExtremumValue < myF)
+ {
+ myF = aExtremumValue;
+ aPnt = aExtremumPoint;
+ }
+ }
+
+ myY.Clear();
+ for(i = 1; i <= myN; i++)
+ myY.Append(aPnt(i));
mySolCount++;
computeGlobalExtremum(myN);
myDone = Standard_True;
-
}
//=======================================================================
set info [2dextrema b9 b10]
set status 0
-for { set i 1 } { $i <= 6 } { incr i 1 } {
+for { set i 1 } { $i <= 1 } { incr i 1 } {
regexp "dist $i: +(\[-0-9.+eE\]+)" $info full pp
- if { abs($pp - 4.316921907096100) > 1.0e-7 } {
+ if { abs($pp - 3.8268201236765877) > 1.0e-7 } {
puts "Error : Extrema is wrong on dist $i"
set status 1
}
--- /dev/null
+puts "==========="
+puts "OCC24946"
+puts "==========="
+puts ""
+######################################################
+# Wrong result obtained by Extrema Curve/Curve
+######################################################
+
+restore [locate_data_file bug24946_ez5] b1
+restore [locate_data_file bug24946_ez101] b2
+
+mkcurve cb1 b1
+mkcurve cb2 b2
+
+extrema cb1 cb2
+regexp {The length ext_1 is+ +([-0-9.+eE]+)} [length ext_1] full ll
+
+if { $ll < 1.0e-7 } {
+ puts "OK: extrema is good"
+} else {
+ puts "Error: extrema is wrong"
+}