过3点求 球体
三元一次方程组 消元 很痛苦
希望没人再推了
1 var radius0:Number, radius1:Number, radius2:Number; 2 ///// 空间不在同一条直线的三个点 3 var vec0:Vector3D, vec1:Vector3D, vec2:Vector3D; 4 radius0 = vec0.lengthSquared; 5 radius1 = vec1.lengthSquared; 6 radius2 = vec2.lengthSquared; 7 var a:Array = [ 8 radius0-radius1, 2*(vec1.x-vec0.x),2*(vec1.y- vec0.y),2*(vec1.z- vec0.z), 9 radius0-radius2, 2*(vec2.x- vec0.x),2*(vec2.y- vec0.y),2*(vec2.z- vec0.z), 10 radius1-radius2, 2*(vec2.x- vec1.x),2*(vec2.y- vec1.y),2*(vec2.z- vec1.z), 11 ]; 12 13 var valueX:Number, valueY:Number, valueZ:Number, temp:Number; 14 valueZ = (a[0]*a[9]-a[8]*a[1])*(a[2]*a[5]-a[6]*a[1])-(a[0]*a[5]-a[4]*a[1])*(a[2]*a[9]-a[10]*a[1]); 15 if( valueZ != 0 ){ 16 temp = ((a[3]*a[5]-a[7]*a[1])*(a[2]*a[9]-a[10]*a[1])-(a[3]*a[9]-a[11]*a[1])*(a[2]*a[5]-a[6]*a[1])); 17 if(temp != 0) 18 valueZ /= temp; 19 else{ 20 valueZ = 0; 21 } 22 } 23 valueY = -1*valueZ*(a[3]*a[9]-a[11]*a[1])-(a[0]*a[9]-a[8]*a[1]); 24 if( valueY != 0 ){ 25 temp = (a[2]*a[9]-a[10]*a[1]); 26 if(temp!=0) 27 valueY /= temp; 28 else 29 valueY = 0; 30 } 31 if( a[1] != 0 ) 32 valueX = -(valueZ*a[3]+a[2]*valueY + a[0]) / a[1]; 33 else 34 valueX = 0; 35 //// 球心 36 var center:Vector3D = new Vector3D(valueX,valueY,valueZ); 37 ///// 半径 38 var radius:Number = Vector3D.distance( center, vec0);

浙公网安备 33010602011771号