明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4261|回复: 26

【难题求解】点到三角形(内部及边界)的最短距离

  [复制链接]
发表于 2012-9-8 18:47:43 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 tm20038175 于 2012-9-27 13:17 编辑

已知一点(m1),一空间三角形(顶点n1,n2,n3),求点到三角形任一点距离中的最小值。

注意:
三角形并不是三点组成的无限面,而是有限的,只包括三角形内部及三边
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2012-9-8 18:52:49 来自手机 | 显示全部楼层
如果太难,简化点,只要能得到点到三角形的最短距离即可(不是三角形所在的空间面)
发表于 2012-9-8 19:01:31 | 显示全部楼层
看不懂——还是给图给真相吧
 楼主| 发表于 2012-9-8 19:19:29 来自手机 | 显示全部楼层
就是有一个点p和一个三角形t,以点p为圆球心作球,求球正好碰到三角形t时候的球半径是多少。
例如:如果点在三角形内,则球半径为0
发表于 2012-9-8 19:53:28 | 显示全部楼层
;; 未经测试,伪源码需要e派工具箱(XCAD)的支持

  1. (defun aaa (pt ptn / lst s0 s1 p1)
  2.   (setq lst '()
  3. s0  (entlast)
  4. s1  (xyp-line (car ptn) (cadr ptn))
  5. p1  (vlax-curve-getclosestpointto s1 pt)
  6. lst (cons (distance pt p1) lst)
  7. s1  (xyp-line (cadr ptn) (caddr ptn))
  8. p1  (vlax-curve-getclosestpointto s1 pt)
  9. lst (cons (distance pt p1) lst)
  10. s1  (xyp-line (car ptn) (caddr ptn))
  11. p1  (vlax-curve-getclosestpointto s1 pt)
  12. lst (cons (distance pt p1) lst)
  13. )
  14.   (xyp-erase (xyp-SSelEntnext s0))
  15.   (car (vl-sort '< lst))
  16. )
 楼主| 发表于 2012-9-8 20:44:43 来自手机 | 显示全部楼层
没看到代码呀?……………………
发表于 2012-9-8 23:39:10 | 显示全部楼层
没有看明题意,最好贴个图示意...
 楼主| 发表于 2012-9-9 00:21:47 来自手机 | 显示全部楼层
chpmould 发表于 2012-9-8 23:39
没有看明题意,最好贴个图示意...

请看看4楼解释就明白了………
 楼主| 发表于 2012-9-9 12:38:15 来自手机 | 显示全部楼层
自己先顶一个。。。。。
发表于 2012-9-26 18:29:46 | 显示全部楼层
tm20038175 发表于 2012-9-8 19:19
就是有一个点p和一个三角形t,以点p为圆球心作球,求球正好碰到三角形t时候的球半径是多少。
例如:如果点 ...

以下程序为点到平面的距离:


  1. ;;;=====================================================
  2. ;;;测试程序:                                            
  3. ;;;=====================================================
  4. (defun c:test(/ pt p1 p2 p3)
  5.   (initget 9)
  6.   (setq pt (getpoint "\n输入测试点:"))
  7.   (initget 9)
  8.   (setq p1 (getpoint "\n输入平面的第一点:"))
  9.   (initget 9)
  10.   (setq p2 (getpoint "\n输入平面的第二点:"))
  11.   (initget 9)
  12.   (setq p3 (getpoint "\n输入平面的第三点:"))
  13.   (princ "\n距离是:")
  14.   (princ (ppp pt p1 p2 p3))
  15.   (princ)
  16. )
  17. ;;;=====================================================
  18. ;;;三点的平面方程(系数)                              
  19. ;;;Formula                                             
  20. ;;;=====================================================
  21. (defun Mat:Plane-by-3P (p1 p2 p3 / A B C D x1 x2 x3 y1 y2 y3 z1 z2 z3)
  22.   (setq x1 (car p1))
  23.   (setq x2 (car p2))
  24.   (setq x3 (car p3))
  25.   (setq y1 (cadr p1))
  26.   (setq y2 (cadr p2))
  27.   (setq y3 (cadr p3))
  28.   (setq z1 (caddr p1))
  29.   (setq z2 (caddr p2))
  30.   (setq z3 (caddr p3))
  31.   (setq D (det3 x1 y1 z1 x2 y2 z2 x3 y3 z3))
  32.   (setq A (+ (det2 y2 z2 y3 z3) (det2 y3 z3 y1 z1) (det2 y1 z1 y2 z2)))
  33.   (setq B (+ (det2 x3 z3 x2 z2) (det2 x1 z1 x3 z3) (det2 x2 z2 x1 z1)))
  34.   (setq C (+ (det2 x2 y2 x3 y3) (det2 x3 y3 x1 y1) (det2 x1 y1 x2 y2)))
  35.   (if (not (and (zerop A) (zerop B) (zerop C)))
  36.     (list A B C (- D))
  37.   )
  38. )
  39. ;;;=====================================================
  40. ;;;点到三点平面的距离                                   
  41. ;;;=====================================================
  42. (defun PPP (pt p1 p2 p3 / ret)
  43.   (if (setq ret (Mat:Plane-by-3P p1 p2 p3))
  44.     (abs
  45.       (/ (apply '+ (mapcar '* (append pt '(1)) ret))
  46.   (distance (reverse (cdr (reverse ret))) '(0 0 0))
  47.       )
  48.     )
  49.   )
  50. )
  51. ;;;=====================================================
  52. ;;;二阶行列式                                          
  53. ;;;The determinant of a 2×2 matrix                     
  54. ;;;=====================================================
  55. (defun det2 (a11 a12 a21 a22)
  56.   (- (* a11 a22) (* a12 a21))
  57. )
  58. ;;;=====================================================
  59. ;;;三阶行列式                                          
  60. ;;;The determinant of a 3×3 matrix                     
  61. ;;;=====================================================
  62. (defun det3 (a11 a12 a13 a21 a22 a23 a31 a32 a33)
  63.   (- (+ (* a11 a22 a33)
  64. (* a12 a23 a31)
  65. (* a13 a21 a32)
  66.      )
  67.      (* a13 a22 a31)
  68.      (* a11 a23 a32)
  69.      (* a12 a21 a33)
  70.   )
  71. )


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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-9-26 03:51 , Processed in 0.174670 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表