| 好的,我发现了一些最奇怪的错误。 
 背景:
 
 我试图找出两个矩形是否相交,如果它们在超过一个给定点上相交(即角点仅接触),它将把它添加到矩形相交列表中。
 
 
         (if (and(and (<= (min ax1 ax2) bx1) (>= (max ax1 ax2) bx1))(and (<= (min ay1 ay2) by1) (>= (max ay1 ay2) by1)))(setq int 1))       (if (and(and (<= (min ax1 ax2) bx1) (>= (max ax1 ax2) bx1))(and (<= (min ay1 ay2) by2) (>= (max ay1 ay2) by2)))(setq int 1))       (if (and(and (<= (min ax1 ax2) bx2) (>= (max ax1 ax2) bx2))(and (<= (min ay1 ay2) by1) (>= (max ay1 ay2) by1)))(setq int 1))       (if (and(and (<= (min ax1 ax2) bx2) (>= (max ax1 ax2) bx2))(and (<= (min ay1 ay2) by2) (>= (max ay1 ay2) by2)))(setq int 1))
 
是的,我知道我应该使用cond,但cond不允许我需要超过1张支票。
  
好的,现在是设置和错误。
  
设置:
 (setq acomp (nth 12 wlist))   (setq aname (nth 0 acomp))   (setq ax1 (nth 1 acomp))   (setq ay1 (nth 2 acomp))   (setq ax2 (nth 3 acomp))   (setq ay2 (nth 4 acomp))   (setq adir (nth 7 acomp))(setq bcomp (nth 9 wlist))     (setq bname (nth 0 bcomp))     (setq bx1 (nth 1 bcomp))     (setq by1 (nth 2 bcomp))     (setq bx2 (nth 3 bcomp))     (setq by2 (nth 4 bcomp))     (setq bdir (nth 7 bcomp))("P3" 202.0 175.0 226.0 178.0 202.0 176.5 "X")"P3"202.0175.0226.0178.0"X"("W10" 198.0 142.0 202.0 254.0 200.0 142.0 "Y")"W10"198.0142.0202.0254.0"Y"
 错误:
 _$ ax1202.0_$ ax2226.0_$ bx2202.0_$ (min ax1 ax2)202.0_$ (<= (min ax1 ax2) bx2)nil
 
您最好的选择可能是在计算中引入“模糊”因子,您可以使用“相等”函数来实现。
  
如果您希望清理代码,请尝试包装所有(和…)函数转换为单个(和…)函数或(或…)。这样,每个人都将被评估,而不需要有一堆if。这是一个很好的提示;如果你有很多非常相似的if,考虑把它们变成某种循环;你也许可以节省一些空间并将其清理干净。
  
希望这有帮助,至少有一点! |