找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1219|回复: 11

[求助] [求助]:求一点P1到......

[复制链接]

已领礼包: 4个

财富等级: 恭喜发财

发表于 2002-10-9 19:02:34 | 显示全部楼层 |阅读模式

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

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

×
求一点P1到一条直线L1的连线Line2,该连线Line2需垂直于直线L1
再求连线Line2和L1的交点坐标.各位高手能指点一下.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-9 19:07:22 | 显示全部楼层

Re: [求助]:求一点P1到......

最初由 tuger 发布
[B]求一点P1到一条直线L1的连线Line2,该连线Line2需垂直于直线L1
再求连线Line2和L1的交点坐标.各位高手能指点一下. [/B]


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

使用道具 举报

发表于 2002-10-10 01:27:00 | 显示全部楼层
我想tuger是想求P1点到L1线段垂线的垂足坐标
L1的两个端点坐标很容易获得,加上P1的坐标,
用简单的三角函数就能得到垂足坐标。
有两个特殊情况:
1、P1在线段L1所在的直线上
2、垂足点不在线段L1的范围之内
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

 楼主| 发表于 2002-10-10 01:47:13 | 显示全部楼层
Qlin兄说得对,我想要解决的就是你说的这两种特殊情况.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-10 08:41:02 | 显示全部楼层
关于第一个情况,假设L1的两个端点为PA和PB,
那么判断P1与PA所连直线与P1与PB所连直线的夹角
是否为0或π的整数倍既可。

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

使用道具 举报

发表于 2002-10-10 09:19:51 | 显示全部楼层
最初由 Qlin 发布
[B]关于第一个情况,假设L1的两个端点为PA和PB,
那么判断P1与PA所连直线与P1与PB所连直线的夹角
是否为0或π的整数倍既可。

而第二种情况,不知你想如何处理这个特殊点? [/B]


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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2002-10-10 16:33:47 | 显示全部楼层
最初由 cy956 发布
[B][QUOTE]最初由 Qlin 发布
[B]关于第一个情况,假设L1的两个端点为PA和PB,
那么判断P1与PA所连直线与P1与PB所连直线的夹角
是否为0或π的整数倍既可。

而第二种情况,不知你想如何处理这个特殊点? [/B... [/B]


大家是不是讨论的麻烦了?我想的办法,大家看看如何

1、先得到L1的两个端点PT1,PT2
2、求PT1,PT2夹角A1
3、A1+(/ PI 2)得到垂直的角A2
4、根据角度A2,和已知的点P1,构造一个临时点P2
      (polar p1 a2 100),距离100这个值随便输,目的获得垂线方向的任意点
5、求P1,P2和PT1,PT2的交点,使用INTERS函数,后面用参数NIL
     (setq int (inters p1 p2 pt1 pt2 nil))

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

使用道具 举报

发表于 2002-10-10 21:12:23 | 显示全部楼层
最初由 Qlin 发布
[B]
5、求P1,P2和PT1,PT2的交点,使用INTERS函数,后面用参数NIL
(setq int (inters p1 p2 pt1 pt2 nil)) ...
[/B]

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-10-10 21:20:19 | 显示全部楼层
最初由 Qlin 发布
[B]这个方法有个问题,当点与直线共线,会得到一个不?.. [/B]


我想上面的朋友的方法不错,目的就想求那个点,如果没有特殊要求的话,点在线上也无所谓。

如果有要求,那么再加上一个判断前后两点的距离是否等于0,就可以排除了。

  1. [FONT=courier new]

  2. (if (not (equal (distance int p1) 0 1e-5))
  3.     (progn
  4.         (.....) ;点在直线外,有垂线
  5.     )
  6.     (progn
  7.          ; 点P1在直线L1上,没有垂线
  8.    )
  9. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-11 17:22:20 | 显示全部楼层

这样可以的

自己写代码:

1  计算L1的端点PT1 和PT2
(setq pt1    (cdr (assoc 10 ...
(setq pt2    (cdr (assoc 11 ...

2  计算PT1到PT2的角度
  (setq ang (angle pt1 pt2))

3  假定虚拟点,使P1到PT-K的直线与L1垂直。
  (setq pt-k (polar p1 (+ ang (* pi 0.5))  20)

4  计算交点
(setq  pt-last
   (inters p1 pt-k pt1 pt2 nil)
)
  注意了,需要 " nil "
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-11 20:46:36 | 显示全部楼层
如果是画图,用 line ,点第二点的时候“per”点直线画垂直线,(getvar "lastpoint")得到垂足。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 4个

财富等级: 恭喜发财

 楼主| 发表于 2002-10-12 01:37:19 | 显示全部楼层

  1. [FONT=courier new]
  2. ;;标注断开或延伸
  3. (defun c:zxbn (/ ang ang1 ang2 ent enta entdist l p1 p2 p3 p4 pt1 pt2 pt3 temppt temppt1
  4.                  tempt x1 x2
  5.               )
  6.   (zxerrset)
  7.   (setvar "CMDECHO" 0)
  8.   (setq enta (car (entsel "\n请点一下要断开或延伸的标注<退出>:")))
  9.   (if enta
  10.     (progn
  11.       (setvar "osmode" 161)
  12.       (setq p4 (getpoint "\n断开点或延伸点<退出>:"))
  13.       (if p4
  14.         (progn
  15.           (setq ent (entget enta))
  16.           (setq p1 (cdr (assoc 13 ent))
  17.                 p2 (cdr (assoc 14 ent))
  18.                 p3 (cdr (assoc 10 ent))
  19.           )
  20.           (setvar "osmode" 0)
  21.           (setq ang (angle p1 p2)
  22.                 ang1 (+ ang (/ pi 2))
  23.                 ang2 (+ ang pi)
  24.           )
  25.           (setq entdist (distance p3 p2))
  26.           (setq tempt (polar p3 ang2 (distance p1 p2)))  ;尺寸线另一端点
  27.           (setq temppt (polar p4 ang1 100))  ;临时点
  28.           (setq temppt1 (inters
  29.                           p1
  30.                           p2
  31.                           p4
  32.                           temppt
  33.                           nil
  34.                         )
  35.           );交点
  36.           (setq x1 (distance p1 temppt)
  37.                 x2 (distance p2 temppt)
  38.                 L (distance p1 p2)
  39.           ) ;;
  40.           (if (or
  41.                 (and
  42.                   (> (- x1 L) 0)
  43.                   (< (- x2 L) 0)
  44.                 )
  45.                 (and
  46.                   (< (- x1 L) 0)
  47.                   (> (- x2 L) 0)
  48.                 )
  49.               )
  50.             (progn
  51.               (if (< 0 (- x1 x2))
  52.                 (progn
  53.                   (setq pt1 p1
  54.                         pt2 temppt1
  55.                         pt3 tempt
  56.                   )
  57.                   (zxdim)
  58.                 )                ;(if (> 0 (- x1 x2))
  59.                 (progn
  60.                   (setq pt1 temppt1
  61.                         pt2 p2
  62.                         pt3 p3
  63.                   )
  64.                   (zxdim)
  65.                 )                ;)
  66.               )
  67.             )
  68.             (progn
  69.               (setq pt1 p1
  70.                     pt2 temppt1
  71.                     pt3 tempt
  72.               )
  73.               (zxdim)
  74.               (setq pt1 temppt1
  75.                     pt2 p2
  76.                     pt3 p3
  77.               )
  78.               (zxdim)
  79.             )
  80.           )
  81.           (entdel enta)
  82.         )
  83.       )
  84.     )
  85.   )
  86.   (zxerrhf)
  87.   (princ)
  88. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-8 19:56 , Processed in 0.369390 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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