millermin 发表于 2012-9-8 23:36:06

顺线的方向延长和缩短直线。

想做个程序,先给定两个点,然后做一直线,这个很容易。然后需要起点缩短一点,终点又延长一点。这个后面的功能如何实现?谢谢。

zhangrunze 发表于 2024-5-4 14:43:06

lyqiezi 发表于 2012-9-10 13:22
(defun c:ssxd()
(setq d1 (getreal "\n输入起点伸长尺寸(缩短输负值)"))
(setq d2 (getreal "\n输入 ...

感谢分享~
生成新线断,原线段没有删除。
学习了~

sunfj 发表于 2022-5-1 18:44:38

lyqiezi 发表于 2012-9-10 13:22
(defun c:ssxd()
(setq d1 (getreal "\n输入起点伸长尺寸(缩短输负值)"))
(setq d2 (getreal "\n输入 ...

很实用,收了。

894560869 发表于 2019-1-7 05:35:12

延长到相交?

millermin 发表于 2012-9-9 08:48:01

试了一下,蛮好玩,但还没有完全达到目的。因为我需要一段缩短,一段延长。这个命令只能固定起点,变终点。

sscylh 发表于 2012-9-9 10:40:40

延长缩短多少?哪个是起点,哪个是终点?

nigma 发表于 2012-9-9 16:57:19

做两次lengthen吧

阿霸jun 发表于 2012-9-9 23:27:21

求点坐标,然后算出缩短延长后的坐标,删除以前的直线,重绘直线,这样应该可以

lyqiezi 发表于 2012-9-10 09:53:58

本帖最后由 lyqiezi 于 2012-9-10 09:54 编辑

我觉得可以用缩放命令,以线中点为缩放基点,缩放比例为:(两端要延长的距离*2+原有线段长度)/原有线段长度
当然,这个只能是两端伸长一样的情况,如果不同的话就要重新计算起点终点了

lyqiezi 发表于 2012-9-10 11:51:16

啊,没看清,以为两边都要伸长,原来是一边伸长一边缩短
用极坐标方式应该比较容易解决吧

lyqiezi 发表于 2012-9-10 13:22:34

本帖最后由 lyqiezi 于 2012-9-10 13:33 编辑

(defun c:ssxd()
(setq d1 (getreal "\n输入起点伸长尺寸(缩短输负值)"))
(setq d2 (getreal "\n输入终点伸长尺寸(缩短输负值)"))
(setq pt1 (getpoint "\n线段起点:"))
(setq pt2 (getpoint "\n线段终点:"))
(setq os (getvar "osmode"));不在开头加,因为选点的时候还是要捕捉的
(setvar "osmode" 0)
(setq ang1 (angle pt1 pt2))
(setq pt1 (polar pt1 ang1 (* -1 d1)))
(setq pt2 (polar pt2 ang1 d2))
(command "line" pt1 pt2 "")
(setvar "osmode" os)
(prin1)
)
发一个看看,合适用不?

millermin 发表于 2012-9-11 10:13:59

谢谢大家。楼上两位的极坐标法应该是最有效的。我一直苦恼如何用简单的方法确定线的角度和方向。原来极坐标法及其容易解决问题。

lincctw_ccl 发表于 2013-5-23 12:24:59

非常方便的程序!
页: [1] 2
查看完整版本: 顺线的方向延长和缩短直线。