weixin_54346561 2021-04-22 22:03 采纳率: 0%
浏览 28

lisp 如何实现双循环

在使用lsp时第一个循环可以正常运行,第二个循环无法运行,最后的成果应该是类似干字的半边的图形
(defun c:cxx()
  (setq h (getreal "主管长="))
  (setq l (getreal "支管长="))
  (setq x (getint "支管数为:"))
  (setq y (getint "节点数为:"))
  (setq p0 (getpoint "输入起始点: "))
  (setq p1(polar p0 (* 0.5 pi) h))
  (command "line" p0 p1 )
  (repeat x 
    (command
      (setq p1(polar p1 (* 0.5 pi) h))
        
      )
    )
       (setq p3 (entget  p1))
       (setq p2(polar p3  (* 2 pi) l))
       (command "line" p3 p2) 
       (repeat y
         (command
            (setq p2 (polar p2 (* 2 pi) l))
      )
    )
  )
      

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-07-14 22:20
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    在这段代码中,第一个循环是循环x次,每次绘制一条线段连接起始点和终点,终点在起始点的正下方;第二个循环是循环y次,每次绘制一条线段连接上一次终点和新的终点,终点在上一次终点的正下方。 如果第二个循环无法运行,可能是因为上一个循环结束后没有正确更新终点变量。 以下是一个可能的修正代码:
    (defun c:cxx()
      (setq h (getreal "主管长="))
      (setq l (getreal "支管长="))
      (setq x (getint "支管数为:"))
      (setq y (getint "节点数为:"))
      (setq p0 (getpoint "输入起始点: "))
      (setq p1 (polar p0 (* 0.5 pi) h))
      (command "line" p0 p1)
      
      (repeat x
        (setq p1 (polar p1 (* 0.5 pi) h))
        (command "line" p0 p1)
      )
      
      (setq p2 p1)
      
      (repeat y
        (setq p2 (polar p2 (* 2 pi) l))
        (command "line" p1 p2)
      )
    )
    

    在这个修正版的代码中,第一个循环结束后更新了p2的数值,使得第二个循环可以正确运行。您可以尝试运行这段修正后的代码,看看是否可以得到预期的结果。

    评论

报告相同问题?