找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 688|回复: 7

[求助] [求助]:3维线相交如何求虚交点

[复制链接]
发表于 2004-4-25 21:25:13 | 显示全部楼层 |阅读模式

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

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

×
3维线相交如何求交点
两个三维线相交,一为等高线全线高度固定(如120),另一高度不定(各点坐标不同50-130), 问如何求交点(虚交点,x y坐标相同即可)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-4-25 21:40:29 | 显示全部楼层
你是说实际绘图还是编程?
绘图时使用“外观交点”(appint、app)捕捉。
Alisp编程时使用Inters函数求,在此之前,将三维点用trans函数转换到当前UCS,然后取二维点求解。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-26 09:12:29 | 显示全部楼层
我用Alisp编程,请问是否应先取出三维点表用trans转换到当前UCS,再与另一线求交点
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-4-26 10:07:03 | 显示全部楼层
应该转换UCS,因为Dxf组码中的坐标都是相当于世界坐标系的,而我们求的虚交点是相对当前坐标系的,虽然Inters函数接受的点只要有一个是二维点,就全部转换为当前平面的投影,但如果坐标系有了旋转变换,这个二维点就不是dxf组码去掉一个Z坐标这样简单。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-26 10:21:08 | 显示全部楼层
ucs我不大明白,能否举例说明,如一个已选三维多义线怎样加入ucs
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-4-27 12:17:18 | 显示全部楼层
说起来二维多义线进行空间转换相对难些,不仅需要进行节点转换,更关键的是进行“拉伸方向”(就是实体本身Z轴方向,也就是厚度方向)组码210转换。三维多义线没有圆弧选项,只要进行节点转换就可以了。
使用trans函数可以进行点在不同坐标系中的转换,R14联机帮助如下:
  1. [B][color=blue]将一个点(或位移量)从一个坐标系转换成另一个坐标系[/color]
  2. (trans pt from to [disp])  [/B]
  3. pt 参数是由三个实数组成的一个表,它既可以被解释成一个三维点,又可以被解释成一个三维位移(矢量)。
  4. from 参数指定 pt 的坐标系,而 to 参数指定返回点的坐标系。如果提供了可选参数 disp 且其值不为 nil,则
  5. 将 pt 作为三维位移而不是三维点看待。from 和 to 参数可以是一个整数代码(其取值和含义如下表所示),
  6. 也可以是一个图元名或一个三维拉伸矢量。
  7. [B]
  8. 坐标系代码
  9. 代码        坐标系[/B]
  10. 0        世界坐标系 (WCS)
  11. 1        用户坐标系 (当前 UCS)
  12. 2        显示坐标系:
  13.   与代码 0 或代码 1 一起使用时,表示当前视口的 DCS
  14.   与代码 3 一起使用时,表示当前模型空间视口的 DCS
  15. 3        图纸空间的 DCS(仅与代码 2 一起使用)
  16. 如果 from 或 to 参数是图元名,它必须是由[B] entnext、entlast、entsel、nentsel [B]和[/B] ssname[/B]等函数
  17. 返回的图元名。这样就可以将某个特定对象的对象坐标系 (OCS) 中的点来回进行转换(对于某些对象,OCS 等价
  18. 于 WCS,对这些对象,OCS 和 WCS 之间的转换是空操作)。使用三维拉伸矢量(三个实数组成的一个表)是来回
  19. 转换对象 OCS 的另一种方法。但是,对于 OCS 等价于 WCS 的那些对象,这种转换也不做任何操作。
  20. trans 函数返回由参数 to 指定的那种坐标系表示的一个三维点(或位移)。例如,给定绕 WCS 的 Z 轴逆时针
  21. 方向旋转 90 度的一个 UCS,那么,
  22. (trans '(1.0 2.0 3.0) 0 1)        返回 (2.0 -1.0 3.0)
  23. (trans '(1.0 2.0 3.0) 1 0)        返回 (-2.0 1.0 3.0)
  24. 关于坐标系的详细信息,请参见坐标系统转换。
  25. 例如,为了从一行文本的插入点画一条直线,需要将文本对象的插入点从文本对象的 OCS 转换到 UCS:
  26. (trans text-insert-point text-ename 1)
  27. 然后就可以将结果传给“起点:”提示。
  28. 相反地,将点值送到[B] entmod [/B]函数中去之前,必须将该点(或位移)值转换成用该对象的 OCS 表示。例如,如
  29. 果要将圆相对 UCS 偏移 (1,2,3)(不使用 MOVE 命令),就需要将该偏移量从 UCS 转换成圆的 OCS:
  30. (trans '(1 2 3) 1 circle-ename)
  31. 然后就可以将结果偏移量加到圆的圆心上去。
  32. 例如,如果用户输入了一个点,且想要找出一条直线的哪一个端点看起来离该点更近,这样就先得将用户输入的点
  33. 从 UCS 转换到 DCS:
  34. (trans user-point 1 2)
  35. 然后再将直线的每一个端点从 OCS 转换到 DCS:
  36. (trans endpoint line-ename 2)
  37. 这样就可以计算出用户输入的点与直线每一个端点间的距离(忽略 Z 坐标),从而确定哪一个端点看起来距用户
  38. 输入的点更近。
  39. trans 函数也可以转换二维点,这需要通过给 Z 坐标赋一个适当的值来实现。所使用的 Z 分量取决于所指定的
  40. from 坐标系和该值是作为一个点还是作为一个位移。如果是作为一个位移,那么其 Z 值总是为 0.0;如果是作
  41. 为一个点,那么其 Z 值由下表确定。
  42. [B]转换二维点时的 Z 坐标值
  43. 原来的坐标系        所填入的 Z 坐标值[/B]
  44. WCS        0.0
  45. UCS        当前标高
  46. OCS        0.0
  47. DCS        投影到当前构造平面
  48.         (UCS XY 平面 + 当前标高)
  49. PSDCS        投影到当前构造平面
  50.         (UCS XY 平面 + 当前标高)
复制代码

对于本主题,主要是求投影,暂时不要管OCS与DCS,只要进行WCS(dxf组码)到当前坐标系(UCS)的转换,就是“(trans pt 0 1)”,转换后得到三维点,取前两位就是投影。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-27 15:34:31 | 显示全部楼层 |阅读模式

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

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

×
多谢ll_j的指点
我要想求出屏幕上的虚交点,用WCS坐标,只选(X,Y)的二维点表也不行,要先转化到当前坐标系(UCS),再取出点表中的X,Y坐标,从两条线取端点集,用inters进行循环判断,才能取出正确的虚交点
这是我的理解,不知是否正确
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-4-27 18:18:36 | 显示全部楼层
再看看Inters的帮助内容:
  1. [B][color=blue]求两条直线的交点坐标[/color]

  2. (inters pt1 pt2 pt3 pt4 [onseg]) [/B]

  3. pt1 和 pt2 参数是第一条直线的端点,而 pt3 和 pt4 参数是第二条直线的端点。如果提供了
  4. onseg 参数且其值为 nil,则由四个点定义的两条线被认为是无限长的,inters 函数返回交点坐
  5. 标,即使这个交点不在其中的一条线(或者两条线)的端点范围之内。如果省略 onseg 参数或者
  6. 其值不是 nil,则交点必须同时位于两条线上,否则 inters 函数将返回 nil。如果这两条线没有
  7. 交点, inters 函数返回 nil。

  8. 所有的点都以当前 UCS 表示,如果所提供的四个点都是三维点,inters 函数检查三维交点。只要
  9. 所提供的点中有一个是二维点,inters 函数就将这两条线投影到当前构造平面上,仅检查它的二维
  10. 交点。

  11. (setq a '(1.0 1.0) b '(9.0 9.0))
  12. (setq c '(4.0 1.0) d '(4.0 2.0))

  13. (inters a b c d)        返回 nil
  14. (inters a b c d T)        返回 nil
  15. (inters a b c d nil)        返回 (4.0 4.0)


这里明确说明,求虚交点(投影)至少需要一个二维点。实体DXF组码中的坐标一般都是相对世界坐标系WCS的(部分是相对于自身OCS的),而我们求的虚交点一般是相对当前坐标的,在坐标系有变换(当前坐标系UCS不等于WCS)时,简单的取坐标组码的前两位是不行的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 06:47 , Processed in 0.319710 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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