Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-06-2007, 13:55   #1 (permalink)
Meep!
 
Registriert seit: Sep 2005
Beiträge: 146
distanz punkt - gerade ?

Hi, ich habs mal in der schule gelernt und leider wieder vergessen
wie berechne ich die minimale distanz zwischen einer geraden und einem punkt?

danke
__________________
http://www.pixartist.de
pixartist ist offline   Mit Zitat antworten
Alt 21-06-2007, 16:05   #2 (permalink)
voidboy
 
Benutzerbild von rendner[i]
 
Registriert seit: Sep 2004
Ort: München
Beiträge: 5.588
Hier ist es erklärt, der Code ist zwar in C++ aber dürfte doch leicht umzusetzen sein.

http://geometryalgorithms.com/Archiv...rithm_0102.htm
__________________
ERROR: Signature is too large
rendner[i] ist offline   Mit Zitat antworten
Alt 10-07-2007, 12:06   #3 (permalink)
DeRailed
 
Benutzerbild von klickverbot
 
Registriert seit: Sep 2006
Beiträge: 321
Wenn dir der Link nicht weiterhelfen sollte: In welcher Form hast du die beiden denn gegeben? Befindest du dich im IR² oder im IR³?
__________________
Zum Thema Code im Forum posten:
Mit den [AS]-Tags bekommt man eine tolle farbige Anzeige, bei der sogar die Zeilennummern eingetragen sind.

Wie man aus [AS]-Tags Code direkt ohne die Zeilennummern kopiert:
Einfach auf den 'Beitrag zitieren'-Knopf drücken und Spaß mit Copy&Paste haben ;)
klickverbot ist offline   Mit Zitat antworten
Alt 13-07-2007, 10:21   #4 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
für 2D hatten wir das schon: exakte Kollision
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 01-08-2007, 14:03   #5 (permalink)
Neuer User
 
Registriert seit: Mar 2006
Beiträge: 28
Vektorlösung

Hallo,

die Threads, auf die hier verwiesen wird, behandeln das Problem mit Winkelfunktionen. Ich versuche, sowas immer zu vermeiden, weil es viel Ressourcen benötigt. Daher hier mal ein reiner Vektoransatz:

Die Linie ist der Vektor A-B

Also erst mal die für diese Berechnungen wichtigen Werte rausfinden, kannst Du dann Standardfunktionen draus machen (der Vektor wird ein Objekt mit dem Namen "v1" sein, p1 und p2 sind A und B).

PHP-Code:
v1 = {};
v1.p1 = {x:A._xy:A._y};
v1.p2 = {x:B._xy:B._y};
v1.vx v1.p2.v1.p1.x;
v1.vy v1.p2.v1.p1.y
Damit hast Du die Werte vx und vy des Vektors in Pixeln. Dann brauchst Du einen weiteren Vektor A-C (C ist der Punkt, dessen Abstand zur Linie Du kennen willst). Von diesem Vektor mußt Du aber auch die "Normalen" kennen, also die Anteile, die vx und vy hätten, wenn die Gesamtlänge 1 wäre. Normalisieren tut man, indem man (per Pythagoras) ausrechnet, wie lang der Vektor ist und vx und vy durch diese Länge teilt. Die normalen nenne ich nx und ny. Du brauchst dann noch die linke oder die rechte Normale ("Henkel", die rechtwinklig links oder rechts vom Vektor abstehen). Die linken Normalen sind lx (=dy) und ly (=-dx). Die Länge ist l.

PHP-Code:
v2 = {};
v2.p1 = {x:A._xy:A._y};
v2.p2 = {x:C._xy:C._y};
v2.vx v2.p2.v2.p1.x;
v2.vy v2.p2.v2.p1.y;
v2.Math.sqrt(v2.vx v2.vx v2.vy v2.vy);
v2.nx v2.vx v2.l;
v2.ny v2.vy v2.l;
v2.lx v2.dy;
v2.ly = -v2.dx
Mit diesen Werten kann man den Vektor v2 (also A-C) auf den Vektor v1 (also A-B) projizeren. Ihn also rechtwinklig auf v1 "fallen" lassen. Ich bin nicht sicher, glaube aber, daß man das "Skalarprodukt" nennt. Auf jeden Fall nenne ich es sp.

PHP-Code:
sp np v2.vx v1.lx v2.vy v1.ly
sp sagt Dir, wie weit von A entfernt auf der Linie A-B der Punkt liegt, der C am nächsten liegt. Wenn Du jetzt wissen willst, wo dieser Punkt liegt, brauchst Du also nur die Strecke sp (in Pixeln) von A Richtung B zu gehen. Dazu brauchen wir wieder nx und ny, nur diesmal von v1 (also A-B).

PHP-Code:
v1.Math.sqrt(v1.vx v1.vx v1.vy v1.vy);
v1.nx v1.vx v1.l;
v1.ny v1.vy v1.l
Jetzt kannst Du also "losgehen". Den neuen Punkt (der auf der Strecke A-B dem Punkt C am nächsten liegt), nenne ich p.

PHP-Code:
= {};
p.v1.p1.sp v1.nx;
p.v1.p1.sp v1.ny
Jetzt kannst Du leicht herausfinden, wie weit C von der Linie A-B weg ist, wieder mit Pythagoras. Ich nehme dazu ein neues Objekt v3.

PHP-Code:
v3 = {};
v3.p1 = {x:C._xy:C._y};
v3.p2 = {x:p.xy:p.y};
v3.vx v3.p2.v3.p1.x;
v3.vy v3.p2.v3.p1.y;
v3.Math.sqrt(v3.vx v3.vx v3.vy v3.vy); 
v3.l ist der Abstand von C zum nächsten Punkt auf der Strecke A-B.

Ich hoffe, ich habe das Fehlerfrei repetiert. Wenn nicht, oder wenn Du mehr über Vektorberechnungen wissen willst, empfehle ich DAS Tutorial:

http://www.tonypa.pri.ee/vectors/index.html

Bis auf Quadratwurzeln brauchst Du hier nur +, - und *. Das schont die Framerate.

Ich hoffe, das hilft Dir.

Dirk
double-stroke 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 18:13 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele