过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);

 

posted @ 2014-07-03 02:15  jalps  阅读(173)  评论(0)    收藏  举报