2 Stimmen

Berechnung der Schnittmenge zweier Quader

Ich möchte eine Methode für meine Quaderklasse schreiben, die den Quader zurückgibt, der durch die Schnittmenge zweier Quader definiert ist.

Ein Quader wird intern durch einen Ursprungspunkt und einen Endpunkt so dargestellt, dass der Vektor vom Ursprung zum Endpunkt notwendigerweise in allen Dimensionen positiv ist.

Als Ausgangspunkt (vielleicht hilfreich, vielleicht nicht) bestimmt die folgende Methode (in Ruby), ob sich die beiden Quader schneiden oder nicht.

def intersects? other_cuboid
  return not( self.top < other_cuboid.bottom ||
              self.bottom > other_cuboid.top ||
              self.left > other_cuboid.right ||
              self.right < other_cuboid.left ||
              self.front < other_cuboid.back ||
              self.back > other_cuboid.front )    
end

Intuitiv scheint es, dass es eine ziemlich sparsame Lösung für dieses Problem sein sollte, aber ich kann nicht von ihr denken... irgendwelche Ideen?

Hinweis: Die Quader sind notwendigerweise an den Achsen ausgerichtet.

1voto

Derek Punkte 808

Ist es in Ordnung, dass Ihre Definition von Quadern von Ihrer anfänglichen Wahl der Basis abhängt?

Wenn alle Quader am Ursprung beginnen und sich dann in die positive Richtung jeder Achse bewegen, ist dann der Schnittpunkt nicht einfach das Minimum aller Koordinaten in jeder Richtung? d.h. Schnittpunkt = min(left1, left2), min(right1, right2), usw. Ich bin mir nicht sicher, ob ich genau verstehe, was Ihre Quader sind, oder was Sie wollen, dass sie sind.

Wenn Ihre Quader in jeder Richtung ausgerichtet sind (wie es nach Ihrer Definition aussieht), können Sie auch den neuen Quader nehmen:

bottom = max(bottom1, bottom2)
top = min(top1, top2)
left = right_most(left1, left2)

usw...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X