schnittpunkt zweier strecken....
- Skyhawk
- Verpackungs-Wegwerfer
- Beiträge: 77
- Registriert: 27.04.2004, 19:40
- Kontaktdaten:
schnittpunkt zweier strecken....
Hi
ich versuche die koordinaten des schnittpunktes zweier strecken herauszufinden.
Mein Rechenweg schaut folgendermaßen aus:
(x1,y1) und (x2,y2) die Anfangs- und Endpunkte deiner ersten Strecke
(x3,y3) und (x4,y4) die Anfangs- und Endpunkte deiner zweiten Strecken
m1 = (x1-x2)/(y1-y2)
m2 = (y3-y4)/(x3-x4)
x = (m1 * (m2*x4 - y4 + y2) - x2) / (m1*m2 - 1)
y = m2 * (x-x4) + y4
irgendwie haut das aber nicht hin... ags macht die dollsten sachen
vielleicht hat einer ne idee wie es einfacher geht?
ich versuche die koordinaten des schnittpunktes zweier strecken herauszufinden.
Mein Rechenweg schaut folgendermaßen aus:
(x1,y1) und (x2,y2) die Anfangs- und Endpunkte deiner ersten Strecke
(x3,y3) und (x4,y4) die Anfangs- und Endpunkte deiner zweiten Strecken
m1 = (x1-x2)/(y1-y2)
m2 = (y3-y4)/(x3-x4)
x = (m1 * (m2*x4 - y4 + y2) - x2) / (m1*m2 - 1)
y = m2 * (x-x4) + y4
irgendwie haut das aber nicht hin... ags macht die dollsten sachen
vielleicht hat einer ne idee wie es einfacher geht?
Zuletzt geändert von Skyhawk am 07.11.2005, 19:24, insgesamt 1-mal geändert.
-
- Hobby-Archäologe
- Beiträge: 133
- Registriert: 25.09.2004, 18:13
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Code: Alles auswählen
int xs;
int ys;
function schnittpunkt(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
float m1;
int t1;
float m2;
int t2;
if (x1==x2) { // 1. Strecke keine Funktion (m=unendlich)
if (x3==x4) { // 2. Strecke keine Funktion
if (x1==x3) {
// Strecken liegen in einer Geraden
return false;
}
else {
// Strecken haben keinen Schnittpunkt (sind parallel)
return false;
}
}
else {
m2=IntToFloat(y3-y4)/IntToFloat(x3-x4);
t2=y3-FloatToInt(m2*IntToFloat(x3));
xs=x1;
ys=FloatToInt(IntToFloat(xs)*m2)+t2;
}
}
else {
if (x3==x4) {
m1=IntToFloat(y1-y2)/IntToFloat(x1-x2);
t1=y1-FloatToInt(m1*IntToFloat(x1));
xs=x3;
ys=FloatToInt(IntToFloat(xs)*m1)+t1;
}
else {
m1=IntToFloat(y1-y2)/IntToFloat(x1-x2);
t1=y1-FloatToInt(m1*IntToFloat(x1));
m2=IntToFloat(y3-y4)/IntToFloat(x3-x4);
t2=y3-FloatToInt(m2*IntToFloat(x3));
if (m1==m2) { // gleiche Steigung, heikel, da m1, m2 floats (siehe hilfedatei)
// evtl. workaround: if (FloatToInt(m1*1000)==FloatToInt(m2*1000))
if (t1==t2) { // gleicher y-Abschnitt
// Strecken liegen in einer Geraden
return 0;
}
else {
// Strecken sind parallel
return 0;
}
}
xs=FloatToInt(IntToFloat(t2-t1)/(m1-m2));
ys=FloatToInt(IntToFloat(xs)*m2)+t2;
}
}
return true;
}
Code: Alles auswählen
if (schnittpunkt(...)) {
code, der xs und ys verwendet;
}
Use gopher repellent on funny little man
- Skyhawk
- Verpackungs-Wegwerfer
- Beiträge: 77
- Registriert: 27.04.2004, 19:40
- Kontaktdaten:
@khrismuc
bis auf die vorunterscheidungen ist das der gleiche rechenweg...
der produziert die lustigsten sachen
vielleicht gehts ja komplett anders?
ich habe zwei scheinwerfer, die einen spot werfen...
nur haben mit raw gezeichnete sachen keine tranzparenz und so wollte ich wenn sich die Lichtkegel schneiden ein dreieck darüberlegen, das die mischfarbe hat....
bis auf die vorunterscheidungen ist das der gleiche rechenweg...
der produziert die lustigsten sachen
vielleicht gehts ja komplett anders?
ich habe zwei scheinwerfer, die einen spot werfen...
nur haben mit raw gezeichnete sachen keine tranzparenz und so wollte ich wenn sich die Lichtkegel schneiden ein dreieck darüberlegen, das die mischfarbe hat....
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Hab den code nicht getestet, werd ich mal schnell machen.
EDIT:
Ok, ich hab den code 1:1 getestet, funktioniert einwandfrei. (Yeah )
Bitte sehr:
http://khrismuc.gmxhome.de/strecken.exe
Skyhawk:
Denk daran, int a/int b ist 0, wenn a<b.
EDIT:
Ok, ich hab den code 1:1 getestet, funktioniert einwandfrei. (Yeah )
Bitte sehr:
http://khrismuc.gmxhome.de/strecken.exe
Skyhawk:
Denk daran, int a/int b ist 0, wenn a<b.
Zuletzt geändert von KhrisMUC am 08.11.2005, 01:11, insgesamt 1-mal geändert.
Use gopher repellent on funny little man
-
- Hobby-Archäologe
- Beiträge: 122
- Registriert: 15.02.2005, 14:59
Re: schnittpunkt zweier strecken....
Hoffe das sind nur Beispielkoordinaten, denn:Skyhawk hat geschrieben: (x1,y1) und (x2,y2) die Anfangs- und Endpunkte deiner ersten Strecke
(x3,y3) und (x4,y4) die Anfangs- und Endpunkte deiner zweiten Strecken
Diese strecken haben nirgends einen Schnittpunkt.
Selbst wenn man diese Strecken verlängert sind sie parallel und haben nicht einen sondern "unendlich" Schnittpunkte.
Das nur als Anmerkung am Rande, vielleicht liegts ja daran.
- KhrisMUC
- Adventure-Gott
- Beiträge: 4674
- Registriert: 14.03.2005, 00:55
- Wohnort: München
Pod:
x1, y1 usw. sind nur Varibalen, die Punkte liegen nicht alle auf einer Funktionsgeraden.
EDIT:
Mir war langweilig
http://khrismuc.gmxhome.de/spots.exe
(kleiner glitch, wenn die Überschneidung zu weit rechts ist;
Strg-Q halten, da Wait(3); in der rep-exe)
x1, y1 usw. sind nur Varibalen, die Punkte liegen nicht alle auf einer Funktionsgeraden.
EDIT:
Mir war langweilig
http://khrismuc.gmxhome.de/spots.exe
(kleiner glitch, wenn die Überschneidung zu weit rechts ist;
Strg-Q halten, da Wait(3); in der rep-exe)
Zuletzt geändert von KhrisMUC am 08.11.2005, 14:14, insgesamt 2-mal geändert.
Use gopher repellent on funny little man
-
- Hobby-Archäologe
- Beiträge: 122
- Registriert: 15.02.2005, 14:59
- Skyhawk
- Verpackungs-Wegwerfer
- Beiträge: 77
- Registriert: 27.04.2004, 19:40
- Kontaktdaten:
- Skyhawk
- Verpackungs-Wegwerfer
- Beiträge: 77
- Registriert: 27.04.2004, 19:40
- Kontaktdaten:
omg.....
nu hab ich den fehler gefunden..............
da ich so verdutzt war das m1-m2 immer null ergab
und m1 und m2 eigentlich nicht identisch sein konnten....
hab ich einfach mal nen display("%d",m1) eingefügt
und m1 und m2 waren immer null....
was nätürlich auch nicht sein konnte...
des rätsels lösung: ich hab vergessen, das die Spots nicht sofort einsetzen..... deshalb waren m1 und m2 null, waren ja keine strecken da.
manchmal könnt ich mich...
auf jeden fall danke für die hilfe
nu hab ich den fehler gefunden..............
da ich so verdutzt war das m1-m2 immer null ergab
und m1 und m2 eigentlich nicht identisch sein konnten....
hab ich einfach mal nen display("%d",m1) eingefügt
und m1 und m2 waren immer null....
was nätürlich auch nicht sein konnte...
des rätsels lösung: ich hab vergessen, das die Spots nicht sofort einsetzen..... deshalb waren m1 und m2 null, waren ja keine strecken da.
manchmal könnt ich mich...
auf jeden fall danke für die hilfe
- Skyhawk
- Verpackungs-Wegwerfer
- Beiträge: 77
- Registriert: 27.04.2004, 19:40
- Kontaktdaten: