找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 737|回复: 11

[编程申请]:求一个点到另两个点组成的直线的垂足

[复制链接]
发表于 2004-2-26 10:12:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
三个点均为空间点,怎么用lisp求一个点到另两个点组成的直线的垂足
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-2-28 11:16:55 | 显示全部楼层
[php]
;返回结果:(世界坐标系的垂足  当前用户坐标系的垂足  以p1p2p3构成的坐标系的垂足).
;测试:(setvar "pdmode" 3)(vl-cmdf ".point" (cadr (setq ptlst (3dper (getpoint)(getpoint)(getpoint)))))
(defun 3dper(p1 p2 p3 /   p3w pt ptw ptu)
  (setq p3w (trans p3 1 0))
  (vl-cmdf "ucs" "n" "3" p1 p2 p3)
  (setq pt (list (car (trans p3w 0 1)) 0 0)
        ptw (trans pt 1 0))
  (vl-cmdf "ucs" "p")
  (setq ptu (trans ptw 0 1))
  (list ptw ptu pt)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

发表于 2004-2-26 16:43:07 | 显示全部楼层
试试这个:
(defun getperpt (p1 p2 p3)
  (setq ang (angle p2 p3))
  (setq p4 (inters p2 p3 p1 (polar p1 (+ ang (/ pi 2)) 1) nil))
  p4
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-2-26 17:42:53 | 显示全部楼层
这个不行,我原来也是这么写的,对于Z坐标不为0的点就不行了,比如P1的Z坐标为0,P2,P3的Z坐标不为0,返回nil,不正确
我想画一条P2,P3的直线,然后通过vlax-curve-getclosestpointto取得P1到这条直线的最近点,但这样好象太哆嗦了,有没有简单一点的算法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-2-26 18:09:18 | 显示全部楼层
最初由 小菜 发布
[B]这个不行,我原来也是这么写的,对于Z坐标不为0的点就不行了,比如P1的Z坐标为0,P2,P3的Z坐标不为0,返回nil,不正确
我想画一条P2,P3的直线,然后通过vlax-curve-getclosestpointto取得P1到这条直线的最近点,但?.. [/B]

将点转换为二维点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-2-26 22:51:46 | 显示全部楼层
p1 p2 p3

aX2 + k = Y2
aX3 + k = Y3
求K 和a
aX1 + k  --> Y1 -->p1
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-2-27 08:21:45 | 显示全部楼层
我数学没学好,五楼的公式没看懂
转换为二维点计算出的结果没有Z坐标,而且不是真正的垂足
我是这么写的,结果正确,但画条线太麻烦:

  1.   [FONT=courier new]
  2. (defun wllp1( c01 c02 c03 / c04 c05 c06) ;计算 c01到c02,c03线段的垂线的交点
  3.   (command "line" c02 c03 "")
  4.   (setq c04 (entlast)
  5.         c05 (vlax-ename->vla-object c04)
  6.         c06 (vlax-curve-getclosestpointto c05 (trans c01 1 0) acExtendBoth)
  7.   )
  8.   (entdel c04)
  9.   (if c06 (setq c06 (trans c06 0 1)))
  10. c06         
  11. )  ;end of defun
  12.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-27 10:21:26 | 显示全部楼层
最初由 小菜 发布
[B]转换为二维点计算出的结果没有Z坐标,而且不是真正的垂足
[B]


求出交点的投影后,可以再计算其Z坐标~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-2-27 14:01:15 | 显示全部楼层
这样算出来的点不是垂足了吧?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-2-27 21:55:35 | 显示全部楼层
试试这样:
  1. (defun 3dper(p1 p2 p3)
  2.   (command "ucs" "3P" p1 p2 p3)
  3.   (setq pd2 (trans p2 0 1)
  4.         pd3 (trans p3 0 1)
  5.         pd  (inters '(0 0 0)
  6.                     (append (polar '(0 0) (+ (angle pd2 pd3) (/ pi 2)) 1) (list 0))
  7.                     pd2
  8.                     pd3
  9.                     nil
  10.             )
  11.         pd  (trans pd 1 0)
  12.   )
  13.   (command "ucs" "")
  14.   pd
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 23个

财富等级: 恭喜发财

发表于 2004-2-28 10:51:46 | 显示全部楼层
使用vl-curve类函数可以获得你要求的点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-2-28 17:24:38 | 显示全部楼层
转换UCS的方法 是一个很好的想法,很简洁
我本想写个不用command命令的函数,但因为不知道怎么计算,不会写,就先用楼上的了,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-26 22:31 , Processed in 0.402965 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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