Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 16-08-2006, 20:34   #1 (permalink)
lernwillig
 
Benutzerbild von Bugfixer
 
Registriert seit: May 2004
Ort: Berlin
Beiträge: 221
Question Unförmiger Kollisionskreis

Hallo zusammen,

ich versuche einen unförmigen kollisionsHALBRING!! (bzw. rechteck mit einer konkaven seitelinie) zu berechnen.

Stellt euch vor ihr hab ein rohr, in dem objekte (rechtecke und kreise) nicht die aussenwand berühren dürfen. Bei kreisen habe ich kein problem, allerdings bei rechtecken funktioniert ein absolut runder kreis nicht, da bei der abstand je nach position variiert.

Meine frage: Kann man so einen kreis überhaupt berechnen und im falle dessen, wie??

Damit ihr es euch besser vorstellen könnt hier einen screenshot wie es aussehen müsste. Und zur besseren verdeutlichung, einen link zur aktuellen, noch nicht ganz fehlerfreien version:

http://www.dpi72.net/pub/kollision/kollisionskreis.jpg
http://www.dpi72.net/pub/kollision/index.html

Bin für jegliche anregungen dankbar.

Beste grüße
Fabian
Bugfixer ist offline   Mit Zitat antworten
Alt 16-08-2006, 20:48   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Wo in deinem Screenshot ist ein Rechteck mit einer konkaven Seitenlinie?

Um welche Form geht es? um die schwarze Linie, deren obere Hälfte wie aus einer Parabel, und die untere Hälfte aus zwei Teilstücken besteht?
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 16-08-2006, 20:50   #3 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Ahh, ich glaub ich check was du willst.

Kannst du nicht einfach Die Abstände aller Ecken zum Mittelpunkt des Kreises berechnen, ist ein Abstand größer dem Radius des Kreises, knallts.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 16-08-2006, 20:58   #4 (permalink)
lernwillig
 
Benutzerbild von Bugfixer
 
Registriert seit: May 2004
Ort: Berlin
Beiträge: 221
Hi,

eigentlich geht es mir nur um die schwarze linie, auf der die blauen rechtecke liegen. Das ist immer das selbe rechteck und soll nur die verschiedenen fälle zeigen.
Habe mal den screenshot aktualisiert, damit es deutlicher wird.

Das beispiel behandelt jetzt nur die linke seite, später werde ich den kollisionsbereich für die andere seite spiegeln.
Bugfixer ist offline   Mit Zitat antworten
Alt 16-08-2006, 20:59   #5 (permalink)
lernwillig
 
Benutzerbild von Bugfixer
 
Registriert seit: May 2004
Ort: Berlin
Beiträge: 221
Zitat:
Zitat von Janoscharlipp
Ahh, ich glaub ich check was du willst.

Kannst du nicht einfach Die Abstände aller Ecken zum Mittelpunkt des Kreises berechnen, ist ein Abstand größer dem Radius des Kreises, knallts.
Das klappt aber nur bei kreisen, nicht bei rechtecken.
Klick mal den anderen link, da funktioniert es ja schon für kreise, allerdings nicht bei den rechtecken.
Oder habe ich dich falsch verstanden?

Update:
Ah, du hast meine frage ja shcon zum teil beantwortet merke ich gerade, sind das parabeln?
Wow, parabeln habe ich flash noch nie berechnet...Hast du zufällig die formel zu hand?

Geändert von Bugfixer (16-08-2006 um 21:05 Uhr)
Bugfixer ist offline   Mit Zitat antworten
Alt 17-08-2006, 07:12   #6 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Ich glaube nicht, das das Parabeln sind, das sah nur so aus, als ich noch nicht wusste, wie die Linie eigentlich zustande kommt.

Bin dennoch der Meinung, dass es mit meinem letzten Vorschlag funktioniert.

Nehmen wir das Recheck ungefähr bei 7:30 Uhr.
Du berechnest einfach nacheinander den Abstand aller Ecken zur Mitte des äußersten Kreises (also zur Wand) (das ist doch ein Kreis? Auf dem Gitter täuscht das)
Sobald einmal der Abstand zur Mitte größer als der Radius des Wand-Kreises ist, ist dein Rechteck außerhalb geraden.
Und die 4 Abstände zu berechnen sollte auch nicht sehr auf die Performance stoßen, du musst nichtmal Wurzeln, kannst auch direkt die Abstände im Quadrat vergleichen.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 17-08-2006, 08:02   #7 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
habe nicht so ganz verstanden, wer trifft jetzt wen? alle kreise und alle rechtecke untereinander oder wird da flippermäig was rundes reingeworfen?

ein echtes berechnen ist etwas aufwendiger. stichwort: rigidbody

vielleicht tut's das da auch, oder bringt dich auf neue ideen:
http://www.seibsprogrammladen.de/fra...ispiele/flash6
-> DragImRaum
im ZIP: NoDrawArea
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (17-08-2006 um 08:07 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 17-08-2006, 09:26   #8 (permalink)
lernwillig
 
Benutzerbild von Bugfixer
 
Registriert seit: May 2004
Ort: Berlin
Beiträge: 221
Hi hgseib,

ich verwende bereits eine modifizierte variante deines noDrawArea scriptes.
Eigentlich möchte ich nur, dass die rechtecke und kreise den innenbereich nicht verlassen.
Die kollision untereinander funktioniert ja schon.

Ich habe aber an deinem beispiel dragImRaum gesehen, dass du nur die eckpunkte, bei nicht runden objekten, zur kollisionsberechnung verwendest.
Das werde ich doch gleich mal ausprobieren.

Vielen Dank
Grüße Fabian

Geändert von Bugfixer (17-08-2006 um 09:31 Uhr)
Bugfixer ist offline   Mit Zitat antworten
Alt 17-08-2006, 10:29   #9 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.324
"..dass die rechtecke und kreise den innenbereich nicht verlassen.."
da ist doch die antwort von Janoscharlipp in #3 bereits richtig gewesen!

rr=kreis_mc._width*kreis_mc._width;
//
rect=rechteck_mc.getBounds(this);
ecke1X=rect.xMin-kreis_mc._x;
ecke1Y=rect.yMin-kreis_mc._y;
if (ecke1X*ecke1X+ecke1Y*ecke1Y > rr)
{ // rechteck ist draussen
}
// dito die anderen drei ecken

oder bei n-ecken, die zusätzlich scaliert und gedreht werden: ein leeres mc in jede ecke des n-ecks und via localToGlobal bekommst du die koordinaten.


"..dass du nur die eckpunkte.."
das ist falsch. ich teste (keine eckpunkte, sondern) immer nur den mittelpunkt des zu bewegenden objektes und mache die kollisionsfläche um den radius (bzw. bei den rechtecken um breite und höhe halbe) grösser.
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (17-08-2006 um 10:30 Uhr)
hgseib ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 08:01 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele