请教空间四个点如何建模生成球体
请教各位:如何不共面的任意空间四个点(已知坐标)如何建模生成过该四点的球体? 这个似乎只有计算?
球面上任意三点组成的圆,在此圆心的法线,是必通过球心的
由此选4点中的三点,做两条这样的法线,即可得到球心
本帖最后由 chmenf087 于 2012-7-27 23:41 编辑
1. 三点生成一平面plane
2. 取得法向量
3. 三点生成圆
4. 取得圆心坐标
5. 圆心处沿法线向量正反方向生成两条Ray
6. 选取不重复的三点重复1-5
7. 求四条Ray交点(交点即圆心)无交点则四点共面退出
8. 由圆心和其中一点求半径R
9. 建立Sphere
完成
List<Point3d> pts =
new List<Point3d>
{
new Point3d(0,0,0),
new Point3d(3,0,0),
new Point3d(0,3,0),
new Point3d(0,0,3)
};
//获取三点所在圆的法向量
Func<Point3d,Point3d,Point3d,Line3d> getcn =
(Point3d p1, Point3d p2, Point3d p3)
=>
{
var ca = new CircularArc3d(p1, p2, p3);
return new Line3d(ca.Center, ca.Normal);
};
var l3d1 = getcn(pts, pts, pts);
var l3d2 = getcn(pts, pts, pts);
if (l3d1.IsParallelTo(l3d2))
{
}
else
{
var ipts = l3d1.IntersectWith(l3d2);
if (ipts.Length == 0)
{
var cen = ipts;
var r = (pts - cen).Length;
var sphere = new Sphere(r, cen);
}
} 任意4点,并不是都一定在球体表面.
也就是说,不一定存在这样的球体.
(x-a)^2+(y-b)^2+(z-c)^2=r^2
坐标带到方程里,有解才行
完美解决!
多谢雪山飞狐_lzh 和chmenf087 !
通过两位才认识到NET开发有CircularArc3d、Line3d等强大的类处理功能。
——简单几行代码解决了数值计算中上百行才能完成的数学难题。
谢谢!
页:
[1]