请问如何在两条平行线中均匀插入n根线段
本帖最后由 20060510412 于 2018-9-28 21:10 编辑在画钢筋图的时候,经常会有这种需求,就是将两个边界直线确定之后,在直线之中均匀生成若干条直线,请问高手可否帮忙写个程序,多谢。
进一步来说,是否可以将两个不平行的直线,通过扇形均布,插入若干条直线。
再进一步,两条曲线之间,均匀插入若干条曲线。
实际效果如下图所示(这个是收费软件中的一个功能,我想请教一下能否用lisp做出来):
本帖最后由 llsheng_73 于 2018-9-29 00:23 编辑
让现在这两条线张角大一些,两端用别的线边起来,多插入几根线看看它的效果?
看不到认为它就是平齐的吧,毕竟比圆弧分布简单些。。。
(defun c:tt(/ e1 e2 p1 p2 p3 p4 n i)
(while(and(setq e1(ssget":E:S"'((0 . "line"))))
(setq e2(ssget":E:S"'((0 . "line"))))
(setq n(getint"插入直线数量")
n(if n n 1)))
(setq e1(entget(ssname e1 0))
p1(mapcar'+'(0 0)(cdr(assoc 10 e1)))
p2(mapcar'+'(0 0)(cdr(assoc 11 e1)))
e2(entget(ssname e2 0))
p3(mapcar'+'(0 0)(cdr(assoc 10 e2)))
p4(mapcar'+'(0 0)(cdr(assoc 11 e2))))
(if(inters p1 p3 p2 p4 t)(setq e1 p4 p4 p3 p3 e1))
(setq e1(/(distance p1 p3)(1+ n)1.)
e2(/(distance p2 p4)(1+ n)1.)
p3(angle p1 p3)
p4(angle p2 p4)
i 0)
(while(< i n)
(setq i(1+ i))
(entmakex(mapcar'cons'(0 10 11)(list"line"(polar p1 p3(* e1 i))(polar p2 p4(* e2 i))))))
))
llsheng_73 发表于 2018-9-28 23:58
让现在这两条线张角大一些,两端用别的线边起来,多插入几根线看看它的效果?
看不到认为它就是平齐的吧, ...
请教一下,这个程序是不是还可以更进一步,将数量那个参数设置个默认值,而且有记忆功能? llsheng_73 发表于 2018-9-28 23:58
让现在这两条线张角大一些,两端用别的线边起来,多插入几根线看看它的效果?
看不到认为它就是平齐的吧, ...
谢谢您的热心,辛苦了!我刚刚入门lisp,读懂代码都比较困难,所以只能先厚着脸皮求代码了 llsheng_73 发表于 2018-9-28 23:58
让现在这两条线张角大一些,两端用别的线边起来,多插入几根线看看它的效果?
看不到认为它就是平齐的吧, ...
非常好用,谢谢"llsheng_73" 长老 panliang9 发表于 2018-9-29 09:04
非常好用,谢谢"llsheng_73" 长老
难道你也有这个需求么{:1_1:} 建议改成n为可变的动态方式,A增加1/S减少1 e2002 发表于 2018-9-30 16:20
建议改成n为可变的动态方式,A增加1/S减少1
这样就更完美了啊,哈哈 能不能改成 分空数?不想用直线根数那么分! zmzk 发表于 2022-2-13 10:19
能不能改成 分空数?不想用直线根数那么分!
变量n直接加1就可以了
页:
[1]
2