schnittpunkt geraden kreis

Neue Frage »

toktok Auf diesen Beitrag antworten »
schnittpunkt geraden kreis
hi, ausgehend von zwei geraden die in einem gemeinsamen punkt ihren ursprung haben, würde ich gern an diesen die zwei schnittpunkte mit einem kreis berechnen wollen, dessen radius immer geich sein soll. dh. das bei einem sich veränderenden winkel der beiden geraden der kreismittelpunkt an der winkelhalbierenden verschoben werden muss. bekannt sind die punkte p0, p1, p2 und der radius des kreises (zum besseren verständnis eine grafik anbei)

vielen dank für euer hilfe im voraus!
toktok
sqrt(2) Auf diesen Beitrag antworten »

Sehe ich das richtig, dass deine "Schnittpunkte" Berührpunkte sein sollen?

Wenn ja, stehen dir die trigonometrischen Funktionen zu Verfügung? Wenn ja, schau dir mal das Viereck genauer an (wobei und die Berührpunkte und der Mittelpunkt des Kreises ist). Du kennst zwei Seiten und alle Winkel.
toktok Auf diesen Beitrag antworten »

ich muss zu meiner schande gestehen, das ich es nicht schaffe es in mein schema zu packen. ich gehe von einem koordinatensystem aus. - ich kenne die beiden seiten b1-m, b2-m == r des kreises und ich kenne die xy-position des punktes p0. der winkel am mittelpunkt des kreises ist ja variabel, da sich dieser immer stumpfer wird, je spitzer die beiden gerade zueinander laufen. da ich die xy-position von m nicht kenne, verstehe ich nicht wie du aus den mir gegebenen werten die winkel errechnest.
sqrt(2) Auf diesen Beitrag antworten »

Die Winkel an den Berührpunkten sind rechte Winkel. Den Winkel am Schnittpunkt der Geraden kannst du mittels Kosinussatz (oder Skalarprodukt) ausrechnen, denn du kennst die Seiten des Dreiecks . Ein Viereck hat eine Winkelsumme von 360°.
toktok Auf diesen Beitrag antworten »

ok, ich versuche das mal nachzuvollziehen...

----------------------------------------------------------

seitenlänge a (p0-p1)
xt = p0.x-p1.x;
yt = p0.y-p1.y;
a = Math.sqrt(xt*xt+yt*yt);

seitenlänge b (p0-p2)
xt = p0.x-p2.x;
yt = p0.y-p2.y;
b = Math.sqrt(xt*xt+yt*yt);

seitenlänge c (p1-p2)
xt = p1.x-p2.x;
yt = p1.y-p2.y;
c = Math.sqrt(xt*xt+yt*yt);

winkel an p0
angP0 = acos((c * c - a * a - b * b) / (-2 * a * b))

winkel an m
angM = 360-2*90-angP0

kathete (strecke zu dem berührungspunkt)
k = radius/Math.tan(angP0/2)

----------------------------------------------------------

puh... bis zu dem punkt konnte ich dir folgen. kannst du mir noch
einen tipp geben, wie ich nun ausgehend von diesen werten auf
die xy-koordinate von b1 komme. ich habe das gefühl ich seh den
wald vor lauter bäumen nicht.

danke!!!
sqrt(2) Auf diesen Beitrag antworten »



Übrigens warst du bei der Seite c mit dem Copy&Paste ein bisschen faul...
 
 
toktok Auf diesen Beitrag antworten »

so langsam bereue ich ich meine damalige arroganz gegenüber vektoren ... 'wer braucht das schon fürs leben' ... nun ja, jetzt ist wohl der zeitpunkt wo ich eines besseren belehrt werde. könntest du mir das bitte etwas eingehender erklären? vielleicht auch so das ich es einfach in flash/actionscript übersetzen kann? ... danke sqrt(2)
sqrt(2) Auf diesen Beitrag antworten »

Ansatzpunkt ist . Von diesem aus gibt der Vektor an, in welche Richtung wir gehen müssen. Dieser wird durch Multiplikation mit dem Kehrwert seiner Länge auf die Länge 1 gebracht (normiert). Durch Multiplikation mit k erhält er genau die Länge, die die Strecke von zu hat.

Ich kann zwar kein ActionScript, aber mit ein bisschen Pseudocode ausgedrückt:

code:
1:
2:
b1.x = p0.x + (p1.x - p0.x) / sqrt(pow((p0.x - p1.x), 2) + pow((p0.y - p1.y), 2)) * k;
b1.y = p0.y + (p1.y - p0.y) / sqrt(pow((p0.x - p1.x), 2) + pow((p0.y - p1.y), 2)) * k;
toktok Auf diesen Beitrag antworten »

vielen lieben dank sqrt(2), endorphine ohne ende!!! ... ich könnte dich glatt umarmen oder dich auf ein bier/macchiato einladen. nochmals danke!

toktok
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »