Start und Endpunkte von Geraden in Abhängigkeit von Radius und Mittelpunkten von Kreisen

09/04/2009 - 16:36 von Knut Krueger | Report spam
Hallo zusammen
ich habe folgende Grafik
http://www.equine-science.de/temp/test.jpg
Die Kreise haben unterschiedliche
Durchmesser R1..Rn und Mittelpunkte M1..Mn
die beiden Pfeile sollen von der Verbindungslinie
Mx-My einen Abstand z haben

Sie sollen an den Tangenten (rechtwinklig zu der Strecke Mx-My) der
Kreise beginnen und enden

Ich suche nun eine Formel (für alle Mittelpunkte x/y >= 0) um Anfangs
und Endpunkte der Pfeile aus den Mittelpunkten der Kreise, den Radien
und dem Abstanz z zu berechnen
(Falls es interessiert der Zweck: Die Grafik soll automatisch anhand
von statistischen Daten gezeichnet werden)

Irgendwie ist mein Gehirn seit der Schulzeit eingerostet...


Viele Grüße Knut
 

Lesen sie die antworten

#1 Stephan Gerlach
10/04/2009 - 00:19 | Warnen spam
Knut Krueger schrieb:
Hallo zusammen
ich habe folgende Grafik
http://www.equine-science.de/temp/test.jpg
Die Kreise haben unterschiedliche
Durchmesser R1..Rn



Wenn du schon den Buchstaben "R" verwendest, dann lieber für den Radius
als für den Durchmesser :-) .

und Mittelpunkte M1..Mn
die beiden Pfeile...



... pro Verbindung zwischen 2 Kreisen, nehme ich an...

... sollen von der Verbindungslinie
Mx-My einen Abstand z haben



Mit z ist bestimmt der "senkrechte" Abstand von einem Pfeil - der ja
parallel zur Verbindungslinie ist - gemeint? (Nur um sicherzugehen.)

Sie sollen an den Tangenten (rechtwinklig zu der Strecke Mx-My) der
Kreise beginnen und enden

Ich suche nun eine Formel (für alle Mittelpunkte x/y >= 0) um Anfangs
und Endpunkte der Pfeile aus den Mittelpunkten der Kreise, den Radien
und dem Abstanz z zu berechnen



Auf die Schnelle zusammengeschusterte "Quick-&-dirty"-Lösung:
-

Wir betrachten 2 Kreise mit den Mittelpunkten M(m1,m2), N(n1,n2) und den
Radien R1, R2.
K1: (x-m1)²+(y-m2)² = R1²
K2: (x-n1)²+(y-n2)² = R2².

Verbindungsgerade g durch die beiden Mittelpunkte M, N:
g: y = (n2-m2)/(n1-m1)*x+(m2*n1-n2*m1)/(n1-m1).

Schnittpunkte von g mit K1:
(x-m1)² + ((n2-m2)/(n1-m1)*x+(m2*n1-n2*m1)/(n1-m1)-m2)² = R1²
x²-m1*x+m1²+(n2-m2)²/(n1-m1)²*x²+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)*x+((m2*n1-n2*m1)/(n1-m1)-m2)²
= R1²
[1+(n2-m2)²/(n1-m1)²]*x²+[-m1+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)]*x+[m1²+((m2*n1-n2*m1)/(n1-m1)-m2)²-R1²]

= 0
x²+[-m1+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)]/[1+(n2-m2)²/(n1-m1)²]*x+[m1²+((m2*n1-n2*m1)/(n1-m1)-m2)²-R1²]/[1+(n2-m2)²/(n1-m1)²]

= 0
(... das ist quadratische Gleichung in Normalform...)
Lösungen dieser Gleichung, die wir s1, t1 nennen wollen:
s1 -[[-m1+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)]/[1+(n2-m2)²/(n1-m1)²]]/2-\sqrt{[[-m1+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)]/[1+(n2-m2)²/(n1-m1)²]]²/4-[m1²+((m2*n1-n2*m1)/(n1-m1)-m2)²-R1²]/[1+(n2-m2)²/(n1-m1)²]}
t1 -[[-m1+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)]/[1+(n2-m2)²/(n1-m1)²]]/2+\sqrt{[[-m1+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)]/[1+(n2-m2)²/(n1-m1)²]]²/4-[m1²+((m2*n1-n2*m1)/(n1-m1)-m2)²-R1²]/[1+(n2-m2)²/(n1-m1)²]}
Das sind die x-Werte der beiden Schnittpunkte von g mit K1. Die y-Werte,
die wir s2 bzw. t2 nennen wollen, erhàlt man durch Einsetzen von s1 bzw.
t1 in g:
s2 (n2-m2)/(n1-m1)*{-[[-m1+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)]/[1+(n2-m2)²/(n1-m1)²]]/2-\sqrt{[[-m1+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)]/[1+(n2-m2)²/(n1-m1)²]]²/4-[m1²+((m2*n1-n2*m1)/(n1-m1)-m2)²-R1²]/[1+(n2-m2)²/(n1-m1)²]}
}+(m2*n1-n2*m1)/(n1-m1)
t2 (n2-m2)/(n1-m1)*{-[[-m1+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)]/[1+(n2-m2)²/(n1-m1)²]]/2-\sqrt{[[-m1+2*(n2-m2)/(n1-m1)*((m2*n1-n2*m1)/(n1-m1)-m2)]/[1+(n2-m2)²/(n1-m1)²]]²/4-[m1²+((m2*n1-n2*m1)/(n1-m1)-m2)²-R1²]/[1+(n2-m2)²/(n1-m1)²]}
}+(m2*n1-n2*m1)/(n1-m1).
Kann man bestimmt noch vereinfachen :-) . Zu beachten ist hier, daß
*zwei* Schnittpunkte
S(s1,s2), T(t1,t2)
zwischen g und K1 herauskommen. Analog zu obiger Rechnung bestimmt man
die Schnittpunkte
U(u1,u2), V(v1,v2)
zwischen g und dem anderen Kreis K2.
Dann müßte man noch herausfiltern, welches denn nun die "richtigen" zu
verwendenden beiden Punkte sind. Dazu könnte man die 4 Abstànde SU, SV,
TU und TV vergleichen und dann dasjenige "Punkte-Paar" mit dem
geringsten Abstand nehmen (andernfalls geht dein Pfeil durch mindestens
einen Kreis quer durch). Sei dies o.B.d.A. SU; dann gehen wir jetzt
davon aus, daß
s1, s2, u1, u2 als Daten vorliegen.
(°)
Wir gehen nun von S(s1,s2) aus (Schnittpunkt Kreis K1 und Gerade g) und
suchen einen Punkt A(a1,a2) (es sollte automatisch ein weiterer Punkt
B(b1,b2) herauskommen) mit folgenden zwei Eigenschaften:
1.) Vektor SA senkrecht zu Vektor SM. Das bedeutet, das Skalarprodukt
SA*SM = 0.
2.) Der Betrag des Vektors SA ist genau z, d.h. |SA| = z.

Bedingung 1.) bedeutet
(a1-s1)*(m1-s1)+(a2-s2)*(m2-s2) = 0.
Bedingung 2.) bedeutet
\sqrt{(a1-s1)²+(a2-s2)²} = z

Wenn man 1.) nach a1 umstellt, erhàlt man
a1 = (a2-s2)*(s2-m2)/(m1-s1)+s1
= (s2-m2)/(m1-s1)*a2-(s2-m2)/(m1-s1)*s2+s1 (#)
Wenn man das in 2.) für a1 einsetzt, erhàlt man
((s2-m2)/(m1-s1)*a2-(s2-m2)/(m1-s1)*s2)²+(a2-s2)² = z²
(s2-m2)²/(m1-s1)²*a2²-2*(s2-m2)²/(m1-s1)²*s2*a2+(s2-m2)²/(m1-s1)²*s2²+a2²-2*s2*a2+s2²

= z²
[(s2-m2)²/(m1-s1)²+1]*a2²-2*[(s2-m2)²/(m1-s1)²*s2+s2]*a2+[(s2-m2)²/(m1-s1)²*s2²+s2²]

= 0
a2²-2*[(s2-m2)²/(m1-s1)²*s2+s2]/[(s2-m2)²/(m1-s1)²+1]*a2+[(s2-m2)²/(m1-s1)²*s2²+s2²]/[(s2-m2)²/(m1-s1)²+1]
(... wieder quadratische Gleichung in Normalform...)
a2 =
[(s2-m2)²/(m1-s1)²*s2+s2]/[(s2-m2)²/(m1-s1)²+1]-\sqrt{[[(s2-m2)²/(m1-s1)²*s2+s2]/[(s2-m2)²/(m1-s1)²+1]]²-[(s2-m2)²/(m1-s1)²*s2²+s2²]/[(s2-m2)²/(m1-s1)²+1]}
b2 =
[(s2-m2)²/(m1-s1)²*s2+s2]/[(s2-m2)²/(m1-s1)²+1]+\sqrt{[[(s2-m2)²/(m1-s1)²*s2+s2]/[(s2-m2)²/(m1-s1)²+1]]²-[(s2-m2)²/(m1-s1)²*s2²+s2²]/[(s2-m2)²/(m1-s1)²+1]}
Wie ich bereits erwàhnte, kommt also hier "automatisch" eine zweite
Lösung b2 raus; nicht nur a2. Das sind jetzt bereits die beiden y-Werte
der End- bzw. Anfangspunkte der beiden Pfeile, an den Kreis K1
angrenzen! Die x-Werte a1 und b1 erhàlt man durch Einsetzen von a2 und
b2 in die Gleichung (#); siehe ein paar Zeilen weiter oben:
a1 =
(s2-m2)/(m1-s1)*{[(s2-m2)²/(m1-s1)²*s2+s2]/[(s2-m2)²/(m1-s1)²+1]-\sqrt{[[(s2-m2)²/(m1-s1)²*s2+s2]/[(s2-m2)²/(m1-s1)²+1]]²-[(s2-m2)²/(m1-s1)²*s2²+s2²]/[(s2-m2)²/(m1-s1)²+1]}
}-(s2-m2)/(m1-s1)*s2+s1
b1 =
(s2-m2)/(m1-s1)*{[(s2-m2)²/(m1-s1)²*s2+s2]/[(s2-m2)²/(m1-s1)²+1]+\sqrt{[[(s2-m2)²/(m1-s1)²*s2+s2]/[(s2-m2)²/(m1-s1)²+1]]²-[(s2-m2)²/(m1-s1)²*s2²+s2²]/[(s2-m2)²/(m1-s1)²+1]}
}-(s2-m2)/(m1-s1)*s2+s1.

Damit sollten zwei der gesuchten vier Punkte, nàmlich A(a1,a2) und
B(b1,b2), komplett vorliegen, und zwar die am Kreis K1. Die Punkte
C(c1,c2), D(d1,d2) am Kreis K2 erhàlt man analog, wenn man in der
Überlegung ab (°) (s.o.) folgende Ersetzungen vornimmt:
- Kreis K1 -> Kreis K2
- S(s1,s2) -> U(u1,u2)
- A(a1,a2) -> C(c1,c2)
- B(b1,b2) -> D(d1,d2).


Wie gesagt ist diese Lösung teilweise etwas "unschön" und sicher
optimerbar; z.B. kann man sicher vieles zusammenfassen, oder
Spezialfàlle wie mögliche auftauchende negative Wurzeln oder Divisionen
durch 0 müßten genauer beachtet werden.


Eigentlich sollte Brain 1.0 laufen.


gut, dann werde ich mir das morgen mal besorgen...
(...Dialog aus m.p.d.g.w.a.)

Ähnliche fragen