Kreis Kollision

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

beanage.johannes

Betreff: Kreis Kollision

BeitragDo, Jul 16, 2009 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo habe mal ne frage bezüglich der kollision von einem kreis.
habe schon gesucht aber nicht wirklich was passendes gefunden.
wie kontrolliere ich ob ein kreis mit etwas kollidiert? iwas mit radius sicher.
weis halt nur nicht wie.

danke

Xeres

Moderator

BeitragDo, Jul 16, 2009 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Logik.
Ein Kreis hat einen Mittelpunkt und einen Radius.
Ein Punkt kollidiert also genau dann mit dem Kreis, wenn er genauso weit vom Mittelpunkt entfernt ist (oder näher), als der Radius groß ist.
Zwei Kreise Kollidieren genau dann, wenn die Entfernung der Mittelpunkte gleich oder kleiner der Summe der Radien der Kreise ist...

Ich empfehle im Übrigen immer Skizzen zu machen. Das Problem aufzuschreiben bzw. zu skizzieren macht es für einen selbst anschaulicher.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

beanage.johannes

BeitragDo, Jul 16, 2009 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
sry aber dafür bin ich zu blöd... könnte jemand bitte einen kleinen sample code schreiben damit ich das iwie kappiere danke.

DaysShadow

BeitragDo, Jul 16, 2009 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Überleg selbst und eigne dir Wissen an das du ohnehin brauchst, es ist besser so als sich immer Codeschnippel vorlegen zu lassen!

MfG DaysShadow
Blessed is the mind too small for doubt

BladeRunner

Moderator

BeitragDo, Jul 16, 2009 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst nur schauen ob der Kreismittelpunkt kleiner Radius vom Punkt der Prüfung wegliegt. Die Entfernung berechnest Du mit dem Pythagoras.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

beanage.johannes

BeitragDo, Jul 16, 2009 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
ok ... wie zieht man wurzeln mit BMax ? hab grade vergessen... doch nen code schnippsel hilft mir einfach es zu kappieren Wink

EDIT ok habe schon... sqr
das problem ist wie berechne ich m? (aua)

aber das kannst net wirklich sein oder:??

Code: [AUSKLAPPEN]

Type TKreis

   Field x%
   Field y%
   Field r%
   Field m%
   
   Method draw()
   
      DrawOval x,y,r*2,r*2
      m = x+r
   
   EndMethod
   
EndType

Global kreis1:TKreis = New TKreis

   kreis1.x = 200
   kreis1.y = 200
   kreis1.r = 100

Global kreis2:TKreis = New TKreis

   kreis2.x = 0
   kreis2.y = 0
   kreis2.r = 100

Graphics 800,600

Repeat
Cls

   kreis1.Draw()
   kreis2.Draw()
   
   kreis1.x = MouseX()
   kreis1.y = MouseY()
   
abstand:Int = Sqr((kreis1.y-kreis2.y)^2+(kreis1.x-kreis2.x)^2)

If kreis1.m-kreis1.r < abstand Then Print "collision"
Print "A"+abstand
Print kreis1.x-kreis2.x
Print kreis1.y-kreis2.y
Print "M-R" +Int(kreis1.m - kreis1.r)

   
Flip
Until AppTerminate()
  • Zuletzt bearbeitet von beanage.johannes am Fr, Jul 17, 2009 0:38, insgesamt einmal bearbeitet

kriD

BeitragFr, Jul 17, 2009 0:31
Antworten mit Zitat
Benutzer-Profile anzeigen
wie wärs denn einfach die x und y position des kreises als mittelpunkt zu nehmen?

(denn kannst du dir zB das field: m sparen.)

lg kriD
Wenn ich du wäre, wäre ich lieber ich!

beanage.johannes

BeitragFr, Jul 17, 2009 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
ok hmm gute idee... trozdem stimmt was mit meinem code nicht richtig *heul*
Code: [AUSKLAPPEN]
Type TKreis

   Field x%
   Field y%
   Field r%
   
   Method draw()
   
      DrawOval x-r,y-r,r*2,r*2
   
   EndMethod
   
EndType

Global kreis1:TKreis = New TKreis

   kreis1.x = 0
   kreis1.y = 0
   kreis1.r = 100

Global kreis2:TKreis = New TKreis

   kreis2.x = 0
   kreis2.y = 0
   kreis2.r = 100

Graphics 800,600

Repeat
Cls


   kreis1.Draw()
   kreis2.Draw()
   
   kreis1.x = MouseX()
   kreis1.y = MouseY()
   
   
abstand:Int = Sqr((kreis1.y-kreis2.y)^2+(kreis1.x-kreis2.x)^2)

If (kreis1.x-kreis1.r) < abstand And( kreis1.y-kreis1.r) < abstand Then Print "collision"

Print "Abstand: "+abstand

   
Flip
Until AppTerminate()


es sagt es würde immer collidieren... weis echt nicht woran das liegt
glaube ich mache beim rüfen kreis1.x-kreis1.r... was falsch

das wurgel

BeitragFr, Jul 17, 2009 1:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin

Ich kanns zwar nicht testen, da ich kein BlitzMax habe, aber so müsste es gehen:
Code: [AUSKLAPPEN]
If (kreis1.r+kreis1.r) > abstand Then Print "collision"


Zwei kollidierende Kreise haben einen kleinereren Abstand als die Summe der Radien.

mfg
1 ist ungefähr 3

Holzchopf

Meisterpacker

BeitragFr, Jul 17, 2009 1:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich könnte es zwar testen, da ich BlitzMax habe, tu ich aber nicht. Aber so müsste es gehen:
Code: [AUSKLAPPEN]
If (kreis1.r+kreis2.r) > abstand Then Print "collision"


Wär dir wahrscheinlich nichtmal aufgefallen, solange kreis1 und kreis2 gleiche Radien haben Rolling Eyes
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

DaysShadow

BeitragFr, Jul 17, 2009 1:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, passt, das geht Wink Wollte es auch grad schreiben bzw. sind mir meine Mathe Erinnerungen gerade wieder hochgekommen(trotzdem hat meine Rübe förmlich gequalmt....^^')

btw nimm wenigstens floats wenn du Berechnungen durchführst, dann hast du es genauer.

MfG DaysShadow
Blessed is the mind too small for doubt

beanage.johannes

BeitragFr, Jul 17, 2009 1:20
Antworten mit Zitat
Benutzer-Profile anzeigen
vieen vielen dank :9 bin nicht drauf gekommen... ich hhorst^^ dabei ist des ja so logisch *grins* bin auch müde und in der schule hatten wir sowas noch garnicht^^

vieeelen dank Very Happy

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group