Strahl schneidet Kreis

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Edlothiol

Betreff: Strahl schneidet Kreis

BeitragDo, Feb 19, 2004 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie finde ich heraus, ob ein Strahl mit der Position x,y und dem Winkel a einen Kreis mit der Position cx,cy und dem Radius cr schneidet?
Ich brauch das für meine Duel - KI.
 

Apocalyptic

BeitragDo, Feb 19, 2004 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, ist zwar keine gute Lösung, aber trotzdem mein Denkansatz:

Du berechnest die Steigung deiner Linie (Linie=Strahl?) ((y2-y1)/(x2-x1) bzw mit Hilfe des Winkels) berechnest für alle in Frage kommenden x die entsprechenden y (y=mx+c), und prüfst damit Die Entfernung zum Mittelpunkt deines Kreises (Pythagoras). Wenn die Entfernung kleiner gleich als der Radius ist, dann sollte sich das ganze schneiden. Ich hoffe mal, ich denk richtig...
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
 

Edlothiol

BeitragDo, Feb 19, 2004 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Müsste theoretisch klappen, aber von der Performance her... Ausserdem weiß ich eigentlich nicht genau, wie lang die Linie sein muss (deshalb Strahl). Egal, ich werds trotzdem mal probieren, danke.
 

Apocalyptic

BeitragDo, Feb 19, 2004 18:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sagte ja, schlechte Lösung Wink

Was hast du den für Informationen von deinem Strahl? Anfangsposition und Winkel?
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
 

HOT-BIT

Gast

BeitragDo, Feb 19, 2004 18:56
Antworten mit Zitat
Hi,

schau unter Superballs. Da hab ich sowas eingebaut.

Toni
 

Edlothiol

BeitragDo, Feb 19, 2004 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Bin ich blind? Ich finds nicht.
@Apocalyptic: Ja, Anfangsposition und Winkel.

D2006

Administrator

BeitragDo, Feb 19, 2004 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
mit hilfe von atan2 könntest du den winkel der position des kreises relativ zum strahl-ursprung ausrechnen. damit kannst du dann die winkel der äußeren punkte des kreises relativ zum ursprung ausrechnen. befindet sich nun der strahl innerhalb dieser beiden winkel, schneidet er den kreis früher oder später

MfG
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Merced

BeitragDo, Feb 19, 2004 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst das so lösen:

Nimm deinen Winkel zähl 90° dazu. Von diesem Winkel aus rechnest Du den Punkt aus, der R (Radius) Einheiten vom Kreiszentrum entfernt ist.
Das gleiche nochmal in die andere Richtung. (Dein Winkel-90°) Jetzt hast Du die Punkte in denen der Strahl den Kreis tangieren (berühren) würde.
Jetzt musst Du nur noch prüfen ob Dein Strahl zwischen beiden Punkten durchgeht oder nicht. Basta.
http://www.starship-battles.de.vu
http://www.venture-interactive.de.vu

Mr.Keks

BeitragFr, Feb 20, 2004 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
beim kreis ist wahrscheinlich die tangentenmethode die beste... ansonsten ist die ganz oben beschriebene gut... habe dazu auch was... http://www.crazypage.net/Inarie/downloads.php "laserdemo", denke ich. is aber unkommentiert =)
MrKeks.net

D2006

Administrator

BeitragFr, Feb 20, 2004 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
ich möchte nur eben darauf hinweisen, dass ein Strahl eine Gerade mit Startpunkt, aber ohne Endpunkt ist. Aus diesem Grund kann man sich die Überprüfung erleichtern.


EDIT @Mike-Nike (s. unten):
Die Linie zwischen zwei Punkten hieß STRECKE Wink
  • Zuletzt bearbeitet von D2006 am Sa, Feb 21, 2004 0:08, insgesamt einmal bearbeitet

Mike Nike

BeitragFr, Feb 20, 2004 21:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm...als Mathematiker ist es meine Pflicht, denke ich, nochmals auf die mathematische Korrektheit hinzuweisen:

1. Eine LINIE hat einen Startpunkt und einen Endpunkt
2. Ein STRAHL hat einen Startpunkt, aber keinen Endpunkt
3. Eine GERADE hat weder Startpunkt, noch Endpunkt

Möge sich mein Ex-Mathelehrer einen Strick nehmen, wenn dies nicht stimmen sollte Wink

Edit: *fettgrins* - ich geb zu, es lag mir auf der Zunge, aber irgendwie hat sich stattdessen Linie in mein Gehirn gepflanzt Wink
..where the only limit is your imagination.

Mr.Keks

BeitragSa, Feb 21, 2004 8:45
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, danke mikenike... sonst hätte ich mich wohl kaum an den stoff der dritten klasse erinnert...

willst du uns nicht auch noch erklären, was der da oben mit kreis meinte? und was sollten eigentlich die tangenten? Wink
MrKeks.net
 

Edlothiol

BeitragSa, Feb 21, 2004 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab jetzt mal die Methode von Apocalyptic ausprobiert...
Code: [AUSKLAPPEN]
function AvoidCircle(sangle,sx,sy,x,y,r)
   ; Vorberechnungen
   cosangle# = cos(sangle)
   sinangle# = sin(sangle)
   ; Berechnen, ob ein Strahl durch den Kreis geht
   ; Überhaupt Overlap?
   firstcolx = -1 : firstcoly = -1
   lastcolx = -1 : lastcoly = -1
   if rectsoverlapex(x-r,y-r,r*2,r*2,sx,sy,cosangle * Avoid_Distance,sinangle * Avoid_Distance) = false then return
   ax# = sx : ay# = sy
   r2 = r^2
   count = 0
   while count < Avoid_Distance
      count = count + 1
      ax = ax + cosangle
      ay = ay + sinangle
      ; Entfernung berechnen
      if ((x-ax)^2 + (y-ay)^2) < r2 then
         ; Kollision!
         if firstcolx = -1 then
            firstcolx = ax
            firstcoly = ay
         end if
         lastcolx = ax
         lastcoly = ay
      elseif lastcolx <> -1 then
         return true ; Einmal ausgetreten, wird es keine Kollision mehr geben
      end if
   wend
end function

Wundert euch nicht über die komischen Namen Wink Ich hoffe auch, es gibt keine Überbleibsel aus den Tests mehr.
Es funktioniert einwandfrei.
Irgendwelche Verbesserungsvorschläge? Ich brauch den ersten und letzten Punkt der Kollision, deshalb hab ichs so implementiert.
Edit: Ach ja, "RectsOverlapEx" funktioniert wie RectsOverlap, nur nimmt es auch negative Breiten/Höhen und subtrahiert die dann von den Koordinaten.

Kryan

BeitragSa, Feb 21, 2004 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
eine sehr dumme frage (möchte sie trotzdem beantwortet haben):
Wie schießt man?
Ok, ich weiß, passt nit hier rein, aber ich wills trotzdem wissen!
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Edlothiol

BeitragSa, Feb 21, 2004 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Höä? Wie "Wie schießt man"? Was meinst du damit?
Das Ausweichen funktioniert jetzt recht gut (naja, recht gut) Razz , danke an alle.

Kryan

BeitragSa, Feb 21, 2004 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
oh, schon gut, auf den nach unten cursor Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Edlothiol

BeitragSa, Feb 21, 2004 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, achso. Sonst hätte ich dir mal empfohlen, die readme.txt zu lesen Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group