Michaels 发表于 2022-7-6 10:08:47

如何获得这些分数?

你好
 
希望有人能指导我如何获得这些点(p1,p2,p3,p4),如所附图像中所示的平行点,起点和终点代表矩形的中心线。
 
这就是我的开始。。。。。。
Wid参数表示矩形两侧的偏移距离
 
当做
 
迈克尔

BlackBox 发表于 2022-7-6 10:15:04

使用极轴函数计算垂直于起点和终点的点。对于角度计算,使用从开始到结束的角度加上半pi和负半pi,以产生所需的合成角度。
 
希望这有帮助!

Michaels 发表于 2022-7-6 10:16:00

非常感谢。

Small Fish 发表于 2022-7-6 10:20:08

也许是这样。。。。。。。
 
(setq OffDist (getreal "\nOffset Distance...: "))
   PtA   (getpoint   "\nPick point 1: ")
   PtB   (getpoint PtA "\nPick point 2: ")
   PtAng (angle PtA PtB)
   Pt1 (polar PtA (+ PtAng (* 0.5 pi)) OffDist)
   Pt2 (polar PtA (- PtAng (* 0.5 pi)) OffDist )
   Pt3 (polar PtB (+ PtAng (* 0.5 pi)) OffDist)
   Pt4 (polar PtB (- PtAng (* 0.5 pi)) OffDist )
);setq
(command "pline"pt1 Pt3 "")
(command "pline"Pt2 pt4"")

Lee Mac 发表于 2022-7-6 10:23:51

很无意义,但写起来很有趣
 

(defun c:test ( / w p g a q l )

(if
   (and
   (setq w (getdist "\nSpecify Width: "))
   (setq w (/ w 2.) p (getpoint "\nSpecify First Point: "))   

   (while (= 5 (car (setq g (grread 't 13 0)))) (redraw) (setq a (angle p (setq q (cadr g))))
       (grvecs
         (setq l
         (list 256
             (polar p (+ a (/ pi 2.)) w) (polar q (+ a (/ pi 2.)) w)
             (polar p (- a (/ pi 2.)) w) (polar q (- a (/ pi 2.)) w)
         )
         )
       )
       l
   )
   )
   (mapcar
   (function
       (lambda ( p q )
         (entmakex (list (cons 0 "LINE") (cons 10 (trans p 1 0)) (cons 11 (trans q 1 0))))
       )
   )
   (list (cadrl) (cadddr l))
   (list (caddr l) (car (cddddr l)))
   )
)

(redraw) (princ)
)
   

Lt Dan's l 发表于 2022-7-6 10:24:51

(defun c:test (/ p1 p2 of)
(setq p1 (getpoint "\nSpecify first point: ")
p2 (getpoint p1 "\nSpecify second point: ")
       of (getint "\nSpecify offset distance: "))
(entmake
   (list
   (cons 0 "line")
   (cons 10 (polar p1 (+ (angle p1 p2)(angtof "270.000000")) of))
   (cons 11 (polar p2 (+ (angle p1 p2)(angtof "270.000000")) of))
   )
)
(entmake
   (list
   (cons 0 "line")
   (cons 10 (polar p1 (+ (angle p1 p2)(angtof "90.000000")) of))
   (cons 11 (polar p2 (+ (angle p1 p2)(angtof "90.000000")) of))
   )
)
(princ)
)

Michaels 发表于 2022-7-6 10:29:59

谢谢大家,非常感谢你们的帮助。
 
我是在发布帮助后做的,它似乎与其他代码完全不同。
 
这样可以吗,或者我必须改变任何一个?
 

(setq wid (getdist "\n Width of Distance :"))
(setq c1 (getpoint "\n    Specify Center point 1 :"))
(setq c2 (getpoint "\n    Specify Center point 2 :" c1))
(setq ang (angle c1 c2))

(setq p1 (polar c1 (+ pi (/ pi 2) ang) (/ wid 2)))   
(setq p2 (polar p1 ang (distance c1 c2)))
(setq p3 (polar c1 (+ (/ pi 2) ang)(/ wid 2)))
(setq p4 (polar p3 ang (distance c1 c2)))


 
非常感谢。

Small Fish 发表于 2022-7-6 10:33:07

看起来不错。。。。剥猫皮的方法有很多。
在代码运行时不要忘记将osmode设置为零,否则可能会发生错误。
旧金山

Lee Mac 发表于 2022-7-6 10:35:51

 
老实说,我会完全避免命令调用-输入像Lines/LwPolyline这样的对象很容易学习,不仅比命令调用快10倍,而且还避免了OSMODE的问题,因此在大多数情况下也避免了需要专用错误处理程序(重置系统变量)。
 

Michaels 发表于 2022-7-6 10:39:30

谢谢大家的关注,非常感谢你们的回复。
 
谢谢李,我同意你的观点,因为entmak'ing比Lisp中的任何命令都要好得多,我正在做
我尽量避免使用命令而不是od Entmakes函数。除此之外,它会给我更多的学习经验
处理Lisp的一般方法。
 
非常感谢。
 
迈克尔
页: [1] 2
查看完整版本: 如何获得这些分数?