Oval-kollision?? [erledigt]
Übersicht

feuerball11Betreff: Oval-kollision?? [erledigt] |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
gibt es eine möglichkeit, zu prüfen ob ein oval mit einem bestimmten punkt zusammenstöst?
pixelgenau natürlich.... ohne ein bild zu zeichnen... ich habe mein programm bis jetzt auf ohne bilder ausgelegt, und so hätte ich es gerne weiter...... |
||
- Zuletzt bearbeitet von feuerball11 am Do, Feb 19, 2009 17:38, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn der Abstand vom Mittelpunkt zum Zielpunkt kleiner ist als der Radius an dieser Stelle, findet eine Kollision statt. | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja. Wie ich es machen würde:
(EDIT: Die Kurzfassung meines Beitrags ist in Form eines Beitrags von Xeres einem über diesen erhältlich. ![]() |
||
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 |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
der erste beitrag klingt am einfachsten...
en den zweiten beitrag.... es ist ein kreis, und mit atan und dem ganzen kram möchte ich noch nicht alzufiel zu tun haben... bin 14 und in der 8. klasse... das ist ein bissle zu viel... cosinus und sinus habe ich gerade so zur anwendung kapiert, was dehinter steckt aber immernochnicht..... wie ermittel ich den abstand zweier punkte??? |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Boar, sag doch, dass es ein Kreis ist.
Abstand von Punkt 1 zu Punkt 2:Code: [AUSKLAPPEN] ab# = Sqr( (p1_x-p2_x)*(p1_x-p2_x) + (p1_y-p2_y)*(p1_y-p2_y))
Wenn der Abstand vom Mittelpunkt(!) des Kreises zum Punkt kleiner oder gleich dem Radius des Kreises ist, gibt's ne Kollision. |
||
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 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kollision ohne Mathematik wirst du nicht hinbekommen...
Wie D2006 schon schrieb: Satz des Pythagoras |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mennsch jetzt habe ich mir solche Mühe gegeben, ein Beispiel zu schreiben, das Oval-Kollision beschreibt und jetzt das. Egal - falls dein Kreis wirklich plötzlich Oval wird:
Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() Global TIMER=CreateTimer(60) Local mx,my Local x=400, y=300, w=200, h=30 While Not KeyDown(1) mx=MouseX() my=MouseY() Color 128,128,128 If InOval( x, y, w, h, mx, my ) Color 255,0,0 EndIf Oval x-w/2, y-h/2, w, h Flip 0 WaitTimer(TIMER) Wend End Function InOval( pXPos, pYPos, pWidth, pHeight, pX, pY ) Local lDiameterFactor# = pWidth /pHeight If Sqr( (pX- pXPos)^2 +( (pY- pYPos) *lDiameterFactor ) ^2 ) < pWidth /2 Return True End Function Das ganze beruht darauf, dass ein Oval nix anderes als ein gestauchter Kreis ist - also kann man auch hier den Satz des Pythagoras anwenden, wenn man dazu einfach diese Stauchung rückgängig macht (in dem man den Y-Abstand mit dem Verhältnis von Breite /Höhe multipliziert) |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Besser währe eventuell noch, wenn man anstatt
Code: [AUSKLAPPEN] If Sqr( (pX- pXPos)^2 +( (pY- pYPos) *lDiameterFactor ) ^2 ) < pWidth /2 Return True
schreibt: Code: [AUSKLAPPEN] Local tval1# = (pX- pXPos)
Local tval2# = (pY- pYPos)*lDiameterFactor If tval1*tval1 + tval2*tval2 < (pWidth*pWidth)/4 Return True Das sollte schneller sein, weil man so nicht ^2 nehmen muss und keine Wurzel ziehen muss. |
||
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
habs. so gehts:
Code: [AUSKLAPPEN] Graphics 400,400,0,2
SetBuffer BackBuffer() Global oval_x=190 Global oval_y= 190 Global oval_size = 40 Repeat Cls Oval oval_x,oval_y,oval_size,oval_size mx=MouseX() my=MouseY() ab# = Sqr( ( ( oval_x+oval_size/2 )-mx ) * ( ( oval_x+oval_size/2)-mx ) + ( ( oval_y+oval_size/2 )-my ) * ( (oval_y+oval_size/2)-my) ) If ab# < oval_size/2 Then Color 255,0,0 ElseIf ab# > oval_size/2 Then Color 255,255,255 EndIf Text 10,10,ab# Flip Until KeyHit(1) an BtbN und D2006 .... könnten ihr eure sachen evt (wens nicht zu viel ausmacht) erklären....[/code] *edit* und an holzkopf: danke für die mühe... |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wurzelziehen ist langsam, einen wert mit sich selbst multiplizieren geht da viel schneller. Deshalb lässt man die Wurzel meist weg und multipliziert stattdessen den vergleichs-wert mit sich selbst. Und ^2 ist auch langsamer als den Wert mit sich selbst zu multiplizieren. | ||
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich frage jetzt mal nicht weiter, warum das schneller geht....... | ||
tobias12 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
rechne mir mal die wurzel von 385 aus.
ist doch schwerer als z.b 12*8. das ist der grund. xD |
||
Mein Projekteforum |
feuerball11 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hm ok... eingesehen....
(tobias kenn ich auch einen in meiner schule... der schreibt nur 1 in matte..) |
||
tobias12 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
der bin ich sicher nicht, denn ich schreibe nur 5 er. (CH) ^^ | ||
Mein Projekteforum |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group