Java 2D Sicht

JVTH

Mitglied
Hi Leute,
Habe ein Problem dabei, wie ich sicht in Java2D realisiere. Also, ich habe einen Roboter, den der User programmiert. Dieser Roboter hat eine Kamera an Bord, mit der man Objekte sehen kann, also andere Entitys. Er soll jedoch nur dass Sehen, was in seinem Blickfeld ist. Dieses soll man auch verändern können, also den Winkel und die Sichtweite. Wenn in seinem Sichtfeld etwas von zB einer Mauer verdeckt ist, soll er das nicht sehen können. Könnt ihr mir sagen in Pseudocode oder erklären, wie ich das umsetzen kann.
Eine Lösung hätte ich schon, die allerdings sehr Arbeitsspeicherlastig ist. Ich lass einfach von ihm aus mehrere Entitys losgehen, die verschwinden, wenn sie Kollidieren und sagen, mit was sie kollidiert sind.
Aber das ist sehr Arbeitsspeicher/Rechenleistungslasting.
Danke JVTH
 
Der roboter fährt ja wahrscheinlich in einer 'Welt' rum. Wie ist diese denn dargestellt? Einfach nur geometrische formen? Dann könntest du einfach von jedem eckpunkt eine 'linie' zu den augen des roboters laufen lassen. Sollte diese linie mit einer anderen geometrie kollidieren, weißt du den punkt, und musst das ganze nur noch eindimensional projizieren.

Regex
 
De Roboter fährt in einer Welt aus Kreisen herum. Also das mit den Eckpunkten hab ich nicht ganz gerafft, aber bei Kreisen ist das eh schwer.
 
An sich klingt das nicht sooo falsch. Aber dieses "~Entities losgehen lassen" klingt in der Tat aufwändig. Sollte es nicht reichen, wenn man Kegelförmig um die Blickrichtung herum "Sichtstrahen" in die Szene schickt, und schaut, ob sie mit etwas kollidieren?
 
kl8ijwyl.png


Paint an die Macht, wer braucht cad?

Das bild dürfte alles erklären, und solange du das ganze nicht mit lichquellen usw rendern möchtest, dürfte das nicht so schwer werden 🙂.

Nur als stichwort: Tangenten-Satz.

Regex.

Hilft gerne noch weiter, sollten nach diesem anstupser noch fragen da sein.
 
Das mit dem Tangenten-Satz hab ich nicht ganz gerafft, wie mir das helfen soll, ansonsten danke an alle. Bräuchte dazu aber noch weitere Erklärungen
 
Der Thread is gut !!
Ich habs umgewandelt, sodass es auch mit meinen Kreisen geht. Neme infach die beiden äusseren Punkte des Kreises und ziehe eine Linie zum Blickpunkt. Dann guck ich ob diese Linien kollidieren. Muss es nur noch in Code umsetzen.

Edit: ist das nicht das, was Regex gesagt hat, wenn ja auch danke
 
Sorry wegen des Doppelpostes, aber wie setze ich das um. Habe irgendtwie mal wieder ein Brett vorm Kopf. Ich dachte die Methode sieht dann so aus:

Java:
public boolean isHidden(Point camera, Point object, int objectRadius, Vector<Point> allObjects)
{
  Point line1P1, line1P2;
  Point line2P1, line2P2;
  
  // hierhin den Code, zum erstellen der beiden Linien
}
 
Tut mir leid,
das ich mich so lange nicht gemeldet habe.

Unter der Annahme, das du jeweils zwei Vektoren hast, welche jeweils die 'Cam' und den kreis an jeweils einer, aber nicht der selben stelle berühren.
Zu erst gugst du, welche kreise alle in der vom view aufgespannten 'ebene' drinn sind.
Dan rechnest du dir die beiden 'Striche' von der 'cam' zum kreis aus, und gugst, ob er von anderen kreisen geschnitten wird. Damit weißt du, ob der kreis gesehen wird, oder nicht.
So wie ich die verstanden habe, möchtest du das ganze jetzt noch '1 dimensional' rändern. Das kannst du ganz einfach machen. Du Sortierst die kreise von der distance zum 'cam' punkt.
Dann zeichnest du einfach einen nach dem nächsten. Vola.

dyspnttn.png


Regex
 
hm, tut mir leid das die Rechtschreibung soooo schlecht ist.
Nicht als Entschuldigung, sondern als Erklärung, ich bin Legastheniker. (Wird oft verstanden ala: Ist mir egal, bin L., so ist das aber nicht gemeint.)
Aber leider hatte ich das Browser-Rechtschreibprüfungs-Plugin ausgeschalten.

Regex

(Sry für Doppelpost, aber das wollte ich noch sagen 🙂)
 

Zurück
Oben