# Java 2D Sicht



## JVTH (31. Okt 2012)

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


----------



## Regex (31. Okt 2012)

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


----------



## JVTH (31. Okt 2012)

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.


----------



## Marco13 (31. Okt 2012)

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?


----------



## Regex (31. Okt 2012)

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.


----------



## JVTH (31. Okt 2012)

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


----------



## Marco13 (31. Okt 2012)

Haja, hatte den Thread heute mittag schon kurz gesucht, aber nicht gefunden: Ich dachte, dass dir http://www.java-forum.org/spiele-mu...ng/137240-problem-sichtfeld-licht-raster.html vielleicht helfen könnte (vielleicht lungert der Autor ja auch noch hier rum und kann Code posten  )


----------



## JVTH (1. Nov 2012)

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


----------



## JVTH (1. Nov 2012)

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:


```
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
}
```


----------



## Regex (4. Nov 2012)

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.






Regex


----------



## Regex (4. Nov 2012)

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 )


----------



## JVTH (18. Dez 2012)

Danke, habs wie Marco13 umgesetzt


----------



## Marco13 (18. Dez 2012)

Hm. Ich hab' gar nichts umgesetzt. Nur einen anderen Thread verlinkt :bahnhof:


----------



## JVTH (18. Dez 2012)

Aso, meine deinen ersten thread. Ein schönes Beispiel für diese Prinzip, nur mit Licht ist das: Left 4k Dead

Edit: Sorry, war ja auch in dem einem Post dein!


----------

