Autor Beitrag
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 23.01.05 22:03 
Hallo ihr Lieben,
nun ist es ein Matheproblem, bei dem ich nicht weiter komme.
Sowohl Kreis als auch Gerade sind durch einen Ortsvektor definiert. Es sind alle Vektoren bekannt. Eigentlich sollte es also kein Problem sein, die beiden Schnittpunkte des Vektor a mit dem Kreis zu bestimmen. Aber hier erst einmal meine Skizze mit allen Angaben:
user defined image
Große Skizze
Bitte nicht wundern, habe versucht, das etwas leserlicher zu kontrastieren. :o

Soo, das Ganze läuft ja wahrscheinlich über eine Gleichsetzung folgender Art:
rA + k*a = rM + r
Daraus folgt auseinander gedröselt:
(3|6) + k*(5|-2) = (5|3) + (x|y)

1. 3 + 5k = 5 + x
2. 6 - 2k = 7,5 + y

Nun kann man ja über das Gleichungsystem k rausschmeißen. Übrig bleiben x und y. Für die gilt, wenn ich mich nicht irre laut Pytagoras

|r| = Wurzel(x²+y²)
Wenn ich jetzt aber die beiden verbleibenden Gleichungen zusammenfriemele, kommt für x und y Quark raus. Mache ich irgendwo nen Grundsatzfehler, ist das evt. alles Murks?
Versucht aber bitte es möglichst einfach zu halten. Ich hatte Vektorrechnung in der Schule noch nicht und bin daher mit vielen Fachausdrücken noch überfragt.

P.S.: Ich habe mal alle Vektoren unterstrichen, ging leider nicht anders!
Edit: * durch + ersetzt.


Moderiert von user profile iconKlabautermann: Topic aus Sonstiges verschoben am Fr 04.02.2005 um 01:28


Zuletzt bearbeitet von Elite am So 23.01.05 23:00, insgesamt 1-mal bearbeitet
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 23.01.05 22:17 
Der Grundgedanke ist richtig ...

Für eine Implementation kannst Du Dir mal die Omorphia-Bibliothek angucken, speziell cvs.sourceforge.net/...hs/OMathGeometry.pas (Function LineSphereIntersection)

Ich hoffe, das hilft Dir weiter ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 23.01.05 22:21 
BenBE hat folgendes geschrieben:
Für eine Implementation[...]

Im Moment geht es mir darum, dieses Problem selbst von Hand erstmal auf Papier zu lösen. Mirmacht die reine Mathematik nämlich im Prinzip mehr Spaß als das Implementieren und da ich den PC als reinen Rechenknecht sehe, möchte ich nach Möglichkeit die Lösung auch vor ihm finden :wink:
Trotzdem danke!

Edit: Mit kommt gerade eine weitere Idee, aber es wär nett, wenn mir jemand sagen könnte, ob die wirklich besser ist als der vorherige Ansatz:
Ich könnte doch auch k erstmal stehen lassen und dafür x und y aus dem Vektor r, also dem Radius, durch trigonometrische Therme ersetzen und so statt x und y nur noch den Winkel Alpha mit sin, bzw. cos stehen zu lassen. Oder bekom ich dann an andere Stelle Probleme?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 23.01.05 23:04 
Gut, im Omorphia-Projekt machen wir das so:

Hier mal die Herleitung:
r = Radius der Kugel, w = Punkt auf der Kugel

Für M = O(0,0,0) erhälst du:
r = abs(w)

aufgegliedert
r^2 = wx^2 + wy^2 + wz^2

div r^2
1 = (wx/r)^2 + (wy/r)^2 + (wz/r)^2

Wenn man nun M <> O(0,0,0) wählt, so muss man diesen von W abziehen:
wx = kx - px, wy = ky - py, wz = kz - pz
1 = ((kx-px)/r)^2 + ((ky-py)/r)^2 + ((kz-pz)/r)^2

Niommt man nun noch den BEwegungsvektor u der Gerade mit hinzu, so erhält man für p = g + n*u, n ist Skalar:
1 = ((kx-gx-n*ux)/r)^2 + ((ky-gy-n*uy)/r)^2 + ((kz-gy-n*uz)/r)^2

Durch umformen und geschicktes Zusammenfassen kann man dies umschreiben zu:
1 = ((kx-gx)/r-(n*ux)/r)^2 + ((ky-gy)/r-(n*uy)/r)^2 + ((kz-gy)/r-(n*uz)/r)^2

definiert man nun:
ax = (kx - gx)/r, ay = (gy - gy)/r, az = (kz - gz)/r
und
bx = ux/r, by = uy/r, bz = uz/r
so erhält man vereinfacht:
1 = (ax-n*bx)^2 + (ay-n*by)^2 + (az-n*bz)^2

Wenn man dies nun ausmultipliziert erhält man:
1 = ax^2 - 2*n*ax*bx + n^2*bx^2 + ay^2 - 2*n*ay*by + n^2*by^2 + az^2 - 2*n*az*bz + n^2*bz^2

Fasst man dies noch geschickt zusammen, erhält man:
1 = ax^2 + ay^2 + az^2 - 2*n*ax*bx - 2*n*ay*by - 2*n*az*bz + n^2*bx^2 + n^2*by^2 + n^2*bz^2

Klammert geschickt aus:
1 = (ax^2 + ay^2 +az^2) - 2*n*(ax*bx + ay*by + az*bz) + n^2*(bx^2 + by^2 + bz^2)

und fasst die eingeklammerten Terme als Skalaprodukte der ektoren a und b auf, so reduziert sich die Gleichung auf:
1 = (a * a) - 2*n*(a*b) + n^2*(b*b)

Umgestellt in die Normalform ergibt sich:
0 = n^2 - 2*(a*b)/(b*b)*n + (a*a - 1)/(b*b)

Ergibt sich für die Lösungsformel:
D = ((a*b)/(b*b))^2 - (a*a - 1)/(b*b)
und weiterhin:
n1 = (a*b)/(b*b) - sqrt(D)
n2 = (a*b)/(b*b) + sqrt(D)

n1 und n2 müssen dann nur noch in g eingesetzt werden ...

HTH

Was anderes macht der Src auch net, nur etwas kürzer ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 24.01.05 20:33 
Ok, erstmal vielen Dank dafür!
Ich habe nur noch eine Frage zu folgendem:
BenBE hat folgendes geschrieben:
Wenn man nun M <> O(0,0,0) wählt, so muss man diesen von W abziehen:
wx = kx - px, wy = ky - py, wz = kz - pz
1 = ((kx-px)/r)^2 + ((ky-py)/r)^2 + ((kz-pz)/r)^2

Hier wird ja der Ortsvektor des Kreismittelpunktes hinzugenommen. Aber da ich mir das Minus nicht ganz ergründen kann, wär es nicht schlecht zu wissen, was jetzt der Orts- und was der Richtungsvektor ist, zum Beispiel bei kx und px.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mo 24.01.05 21:47 
M(kx,ky,kz) ist der Kreismittelpunkt, P(px,py,pz) ist ein Punkt auf der Geraden ... falls Du das meintest ...

Siehe den nächsten Schritt. Dort hab ich dann für P die Geradengleichung eingesetzt ...

Achso: laut Stefan-W (der das für Omorphia implementiert hat), ist da noch irgendwo ein Vorzeichenfehler drin, weiß nur leider nicht mehr ganz genau wo ... Im Source ist der aber nicht mehr drin :P

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Elite
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 25.01.05 17:22 
BenBE hat folgendes geschrieben:
laut Stefan-W (der das für Omorphia implementiert hat), ist da noch irgendwo ein Vorzeichenfehler drin, weiß nur leider nicht mehr ganz genau wo ...

Ich tippe auf genau die Stelle, die ich zitiert habe :tongue:
Brauchst dich aber nicht weiter drum zu kümmern. Habt mir sehr geholfen ihr Omorphianer!
Sigma
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Do 03.02.05 23:37 
hallo, es kann sein, dass das hier voll die peinliche aktion wird, aber warum macht ihr das so kompliziert mit dreidimensionalen punkten ? das ganze geschieht doch in einer ebene, also berechnet man die parametergleichung des kreises mit
(x-x0)^2 + (y-y0)^2 = r^2
und die gleichung der gerade durch den vektor a mit
y=mx+t
und setzt dieses dann einfach in die obere gleichung ein und löst nach x auf oder ?
also:
(x-5)^2+(y-3)^2=9

P1(3/6)
P2(8/4)

6=3m+t
4=8m+t

aufgelöst ergibt sich
y=-2/5*x+36/5
das nur noch oben einsetzen und auflösen von der entstehenden quadratischen gleichung

bitte macht mich nicht platt, wenns das jetz grottenfalsch ist, bin hier nur zufällig draufgestossen und gebe gerne meien senf dazu, ich lass mich auch gerne eines besseren belehren *g*
thx sigma
sourcehunter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 482

Win XP | Suse 10.1
Delphi 2005 Pers.
BeitragVerfasst: Fr 04.02.05 12:29 
Wenn du schon mit Vektoren rechnest, dann bitte auch konsequent. Ich habe das in der Schule so gelernt:

k: (x-m)²=r² => (x-m)*(x-m)=r² (Skalarprodukt)
m: Ortsvektor zum Mittelpunkt des Kreises (5;3)
r: Radius (9)

g: x=p+a*v; a ist Element R
p: Ortsvektor des Stützpunktes (3;6)
v: Richtungsvektor der Geraden (5;-2)
a: Laufparameter

g in k einsetzen:

(p+a*v-m)²=r²

=>((3;6)+a*(5;-2)-(5;3))²=81 zusammenfassen
(-2+5*a;3-2*a)²=81 Skalarproduktauflösen (s.u.)
(-2+5*a)²+(3-2*a)²=81 quadratische Gleichung nach a auflösen.

nach a umstellen, fertig.

Das Skalarprodukt:

a=(ax,ay); b=(bx,by)
a*b=(ax,ay)*(bx,by)=ax*bx+ay*by

_________________
Linux und OpenSource rulez!