2017-04-13 2 views
0

Ich habe versucht, alle anderen Artikel zu diesem Thema zu betrachten, aber ich habe nichts gefunden. Meine Frage ist, wie könnte ich bei vier Eckpunkten eines Rechtecks ​​irgendwelche Punkte finden, die innerhalb oder auf dem Rechteck liegen, unabhängig von der Drehung. Mein Zweck ist, dass ich ein Array habe, das eine Karte darstellt, wobei jeder Index eine Punktposition darstellt. Ich möchte in der Lage sein, ein Rechteck auf dieser Karte zu platzieren und alle Punkte, die es abdeckt, zu füllen. Wenn Pseudo-Code zur Verfügung gestellt werden könnte sowie die Mathematik dafür würde ich es sehr zu schätzen wissen. Ich bin vertraut mit Java und RBX.LuaAlle Punkte in einem Rechteck finden?

+0

Mögliches Duplikat von http://stackoverflow.com/questions/17136084/checking-if-a-point-is-inside-a-rotated-rectangle. – lhf

Antwort

0

Googeln Sie einfach "fill-Rechteck-Algorithmus" und Sie werden viele Lösungen und Beispiele finden.

Ein einfacher Weg:

Für jede Zeile (oder Spalte) des Rasters (Bild), berechnen die Kreuzungen mit dem Rechteck.

Damit haben Sie eine Reihe von Intervallen, die Sie ausfüllen müssen.

Vielleicht auch das Lesen dieser http://fivedots.coe.psu.ac.th/~montri/Teaching/240-422/filling1.pdf

0

hilft, weiß ich nicht, ob dies ist, was Sie suchen ...

aber immer noch ein einfacher Weg, dieses Problem zu lösen wäre, schließen Sie die vier Punkte Verwenden eines Linienzeichnungsalgorithmus und Anwenden eines einfachen Füll- oder Grenzfüllungsalgorithmus.

Hinweis: Alle diese Algorithmen kommen unter Computergrafik. Auch diese Technik ist ein viel schnellerer Ansatz als das interne Füllen von Punkten nacheinander und eliminiert auch Berechnungen für Punkte außerhalb des Rechtecks.

Bevor Sie die Füllung anwenden, müssen Sie die Begrenzungslinien mit der Linienzeichnung algo zeichnen und die Werte der Grenze auf newcol (newcolour) setzen, dann kann die untere Füllung verwendet werden.

void floodfill(int x,int y,int old,int newcol) 
{ 
      int current; 
      //assign current with the color of x,y point 

      if(current==old) 
      { 

          //assign x,y point with newcol 

          floodfill(x+1,y,old,newcol); 
          floodfill(x-1,y,old,newcol); 
          floodfill(x,y+1,old,newcol); 
          floodfill(x,y-1,old,newcol); 
      } 
} 

können Sie das obige Verfahren verwenden, wo Sie müssen nur alle innerhalb Punkt gehen (x, y) des Rechtecks ​​und alten Farbe, die mit der neuen Farbe ersetzt werden soll. Angenommen, die Farbwerte sind ganzzahlige Werte in dem von Ihnen erwähnten Array.

enter image description here

0

Verwenden Point-In-Polygon (Java sample code) zu überprüfen, ob sich ein Punkt innerhalb der Umgebung ist, oder nicht. Für Ihren Fall ist der Bereich ein Rechteck. Wenn mit multiply Punkten, Schleife durchlaufen und Punkt für Punkt überprüfen.

Verwandte Themen