好的,我发现了一些最奇怪的错误。
背景:
我试图找出两个矩形是否相交,如果它们在超过一个给定点上相交(即角点仅接触),它将把它添加到矩形相交列表中。
- (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.0
- 175.0
- 226.0
- 178.0
- "X"
- ("W10" 198.0 142.0 202.0 254.0 200.0 142.0 "Y")
- "W10"
- 198.0
- 142.0
- 202.0
- 254.0
- "Y"
错误:
- _$ ax1
- 202.0
- _$ ax2
- 226.0
- _$ bx2
- 202.0
- _$ (min ax1 ax2)
- 202.0
- _$ (<= (min ax1 ax2) bx2)
- nil
您最好的选择可能是在计算中引入“模糊”因子,您可以使用“相等”函数来实现。
如果您希望清理代码,请尝试包装所有(和…)函数转换为单个(和…)函数或(或…)。这样,每个人都将被评估,而不需要有一堆if。这是一个很好的提示;如果你有很多非常相似的if,考虑把它们变成某种循环;你也许可以节省一些空间并将其清理干净。
希望这有帮助,至少有一点! |