免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6123 | 回复: 16
打印 上一主题 下一主题

[算法] 程序里面要用到点到面的距离算法,数学高手帮忙过来看看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-20 16:06 |只看该作者 |倒序浏览
已知
1,ABC三点的(X,Y,Z)坐标为 (AX,AY,AZ),(BX,BY,BZ),(CX,CY,CZ)
2,D的X,Y坐标为 (DX,DY)
3,ABC三点位置已知,可以得到一个由ABC组成的空间平面P,D点在P上。


D的Z坐标

<<
原来的问题,没写清楚要求
已知A,B,C三点到平面X的距离分别为10 30 64,点D在ABC组成的平面上,D到ABC的距离分别为15 14 20,求D到平面X的距离 y.
>>

[ 本帖最后由 Moonwellatg4 于 2006-11-22 12:04 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2006-11-20 16:10 |只看该作者
这是很基本的数学问题,不需要高手,而只是常识

论坛徽章:
0
3 [报告]
发表于 2006-11-20 16:15 |只看该作者
再补充一下,免得被人认为是高中生找作业答案了.

3D游戏里面的地面,先得到某块区域中的部分高度值,根据这些得到的值,计算出这块区域中剩余点的高度.这个高度是个近似的结果.
比如,地面某块区域中,总共有100*100个点,其中的80%的点的高度已经得到,剩余的20%的点的高度值,由程序计算得出.

选用的算法:
1,取得与目标点最近的3个点,这3个点确定了一个平面
2,近似的人为,这个点在这个平面上,这样能够得到相对比较接近的结果
3,根据这个点与已知3个点的距离,算出这个点到水平面的距离(也就是高度)

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
4 [报告]
发表于 2006-11-20 17:21 |只看该作者

  1. //点到平面的距离

  2. //2005年12月8日夜思口重写,2006/01/26性能测试,一次调用1us

  3. //这个函数可以不改了,应该没什么可优化的

  4. double CGeoFunc::PointToPlaneDistance(CGeoPlane &PL, C3DPoint P)

  5. {



  6.         //平面有一个点PONP和法线来表示,连接P和PONP可求角度

  7.         C3DVector PONP_P(PL.GetPoint(),P);

  8.         //如果cosalpha小于0,则P在法线指向的另外一面

  9. //        double cosalpha=_VDotV(PONP_P,PL.GetNormal())/(_VMod(PONP_P)*_VMod(PL.GetNormal()));

  10.         double cosalpha=PONP_P*PL.GetNormal()/PONP_P.mod()/PL.GetNormal().mod();

  11.         double ptop=PointToPointDistance(PL.GetPoint(),P);

  12.         return fabs(cosalpha*ptop);



  13. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2006-11-20 21:09 |只看该作者
多谢 醉卧水云间 的回复。
不过,我需要的是上面问题的完整解法,不只是点到面的距离。

论坛徽章:
0
6 [报告]
发表于 2006-11-20 21:15 |只看该作者
求 D 点坐标就可以了

论坛徽章:
0
7 [报告]
发表于 2006-11-20 21:24 |只看该作者
三幢楼房,高度分别为 10 层,30 层 和 64 层,每层均 1 米,假设避雷针安装在每幢楼的楼顶,长度为零,那么三幢楼上,两两楼房的避雷针用绳连好,并假设绳子不弯曲、变形。然后建立绳子平面,利用平面上任意一点到地面距离关系列方程,再把已知数据(点到三个避雷针的距离)代入,求 D 的铅垂坐标

这个方法还不完整,并且看来我要好好复习立几了。

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
8 [报告]
发表于 2006-11-20 21:40 |只看该作者
原帖由 Moonwellatg4 于 2006-11-20 21:09 发表
多谢 醉卧水云间 的回复。
不过,我需要的是上面问题的完整解法,不只是点到面的距离。


求D坐标,简单的平面几何问题。

论坛徽章:
0
9 [报告]
发表于 2006-11-21 20:27 |只看该作者
原帖由 醉卧水云间 于 2006-11-20 21:40 发表


求D坐标,简单的平面几何问题。


请用平几解一遍,谢谢

论坛徽章:
39
2017金鸡报晓
日期:2017-02-08 10:39:4219周年集字徽章-周
日期:2023-04-15 12:02:2715-16赛季CBA联赛之深圳
日期:2023-02-16 14:39:0220周年集字徽章-年
日期:2022-08-31 14:25:28黑曼巴
日期:2022-08-17 18:57:0919周年集字徽章-年
日期:2022-04-25 13:02:5920周年集字徽章-20	
日期:2022-03-29 11:10:4620周年集字徽章-年
日期:2022-03-14 22:35:1820周年集字徽章-周	
日期:2022-03-09 12:51:3220周年集字徽章-年
日期:2022-02-10 13:13:4420周年集字徽章-周	
日期:2022-02-03 12:09:4420周年集字徽章-20	
日期:2022-01-25 20:14:27
10 [报告]
发表于 2006-11-21 20:56 |只看该作者
原帖由 langue 于 2006-11-21 20:27 发表


请用平几解一遍,谢谢


老大提要求了,呵呵。算法要求ABC三点是已知的,高度是z坐标,这点楼主提到了,但xy也不能少,否则ABC形状不固定,按理是可以获得xyz全部坐标值。已知D在平面内,到ABC三点距离已知,应该D点可求,作局部坐标系,以A为原点,以AB为X轴,就可以求到D点的坐标,再变换到世界坐标就可以了,这就是个平面几何问题。

设D(x,y)
有方程组:

x*x+y*y=d1*d1;
(x-B.x)*(x-B.x)+y*y=d2*d2
(x-C.x)*(x-C.x)+(y-C.y)*(y.c.y)=d3*d3

三个方程,两个未知数,其实是多余了一个方程的。只需要知道两个条件,到A的距离和到B的距离就可以确定D了。当然那样会得到两个关于AB的镜像点,排除在外边的那个就行。计算机解这个方程再简单不过了。

但这里,坐标系的变换比问题本身更难,要用到矢量、矩阵和行列式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP