Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

intersects-metoden skal returnere true dersom to SpaceObject-instanser (this og argumentet) overlapper. Sjekk for overlapp kan gjøres på mange måter, f.eks. sjekke overlapp av såkalt "bounding box" (minste omsluttende rektangel) eller om midten og/eller hjørnene i det ene polygonet er inni det andre (og vice versa), eller en kombinasjon av flere av disse. contains-metoden BaseSpaceObject i er nyttig her. Enkle teknikker vil dekke mange relevante tilfeller, men for å ta alle hjørnetilfellene (wink) så må en være litt kløktig og kombinere flere typer teknikker. Figuren til høyre viser fire polygoner som har litt ulik type overlapp og tabellen bortenfor viser hvilke som overlapper (fasit for testkoden).

  • De blå, grønne og røde polygonene overlapper, og her vil en "bounding box"-test fungere. Men en slik test vil også gi overlapp med den gule, og det stemmer jo ikke.
  • En test for om hjørnene til den ene er inni den andre (og vice versa), vil fungere for de fleste, men ikke for den røde og grønne.
  • En test for om midt-punktet til den ene er inni den andre (og vice versa), vil fungere for de fleste, men ikke for den grønne og gule.

Det som altså fungerer best er en kombinasjon av alle disse teknikkene!

Image RemovedImage Added
 Blå (so1)Grønn (so2)Rød (so3)Gul (so4)
Blåxxx 
Grønnxxxx
Rødxxx 
Gul x x
 

...