乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 86|回复: 5

请教空间四个点如何建模生成球体

[复制链接]

16

主题

47

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2012-7-27 16:41:00 | 显示全部楼层 |阅读模式
请教各位:
   如何不共面的任意空间四个点(已知坐标)如何建模生成过该四点的球体?
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2012-7-27 23:19:00 | 显示全部楼层
这个似乎只有计算?
球面上任意三点组成的圆,在此圆心的法线,是必通过球心的
由此选4点中的三点,做两条这样的法线,即可得到球心
回复

使用道具 举报

8

主题

138

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2012-7-27 23:39:00 | 显示全部楼层

1. 三点生成一平面plane
2. 取得法向量
3. 三点生成圆
4. 取得圆心坐标
5. 圆心处沿法线向量正反方向生成两条Ray
6. 选取不重复的三点重复1-5
7. 求四条Ray交点(交点即圆心)无交点则四点共面退出
8. 由圆心和其中一点求半径R
9. 建立Sphere
完成
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2012-7-28 10:41:00 | 显示全部楼层
List pts =
                new List
                {
                    new Point3d(0,0,0),
                    new Point3d(3,0,0),
                    new Point3d(0,3,0),
                    new Point3d(0,0,3)
                };
            //获取三点所在圆的法向量
            Func 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[0], pts[1], pts[2]);
            var l3d2 = getcn(pts[3], pts[1], pts[2]);
            
            if (l3d1.IsParallelTo(l3d2))
            {
            }
            else
            {
                var ipts = l3d1.IntersectWith(l3d2);
                if (ipts.Length == 0)
                {
                    var cen = ipts[0];
                    var r = (pts[0] - cen).Length;
                    var sphere = new Sphere(r, cen);
                }
            }
回复

使用道具 举报

1

主题

10

帖子

6

银币

初来乍到

Rank: 1

铜币
14
发表于 2012-7-30 13:49:00 | 显示全部楼层
任意4点,并不是都一定在球体表面.
也就是说,不一定存在这样的球体.
(x-a)^2+(y-b)^2+(z-c)^2=r^2
坐标带到方程里,有解才行
回复

使用道具 举报

16

主题

47

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2012-7-30 16:33:00 | 显示全部楼层
完美解决!
多谢雪山飞狐_lzh 和chmenf087 !
通过两位才认识到NET开发有CircularArc3d、Line3d等强大的类处理功能。
——简单几行代码解决了数值计算中上百行才能完成的数学难题。
谢谢!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 14:03 , Processed in 1.403592 second(s), 65 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表