2 Kreis mit einer Linie Verbinden, vom Rand der Kreise aus |
08.07.2004, 10:32 | Raphi | Auf diesen Beitrag antworten » | |||||
2 Kreis mit einer Linie Verbinden, vom Rand der Kreise aus Hab euch hier über Google gefunden... Hab da ein Problem (für euch wahrscheinlich ein kleines ). Bin grad drann einen Grapheneditor in Java zu schreiben. Problem: Ich habe auf der Zeichenoberfläche 2 Knoten (2 Kreise) und eine Verbindung zwischen ihnen (eine Linie). Aktuell läuft diese Linie vom Mittelpunkt des Knoten 1 (n1) zum Mittelpunkt des Knoten 2 (n2). Ich brauche jetzt aber eine Linie, die vom Kreisrand des <n1> zum Kreisrand des <n2> läuft (ich hoffe das ist jetzt gut genug beschrieben ;-)). Vorgaben sind dabei: Das ganze läuft in einem 2D-Koordinatenraum. Knoten/Kreis 1: n1 -> x=10, y=10, width=50, height=50 (damit ist der Kreismittelpunkt: m1 -> x=x+width/2=35, y=y+height/2=35) Knoten/Kreis 2: n2 -> x=100, y=200, width=50, height=50 (Kreismittelpunkt m2 -> x=125, y=225) Verbindung/Linie: l -> x1=35, y1=35, x2=125, y2=225 (bissher, Mittelpunkt 1 zu Mittelpunkt 2) Gesucht: Ich brauche die 2 Punkte (2 x,y-Werte), welche auf den Kreisaussenlinien liegen, so das die 2 Knoten "schön" verbunden aussehen, und die Linie nicht von Mittelpunkt zu Mittelpunkt läuft. Lösungsansatz: Weiss nicht genau wie man das lösen könnte, bissher bin ich nur drauf gekommen (hab mein altes schulwissen noch net ganz wieder herhohlen können ;-)), das ganze mit einer Geradenformel zu machen. Aber irgendwie kommt es mir vor, das das der falsche ansatz ist, da ich nciht wirklich weiter komme... 2-Punkte Formel zur Geraden durch die Mittelpunkte: l = m1+t*(m2-m1) => (35, 35) + t * (125-35, 225-35) = (35, 35) + t * (90, 190) Radius eines Kreises ist ja: 25 (width/2 oder height/2 da width=height gilt) komm ich mit der Geraden und dem Radius nicht auf einen Punkt, der auf der Linie des Kreises liegt? PS: danke schonmal im vorraus für die Hilfe. |
|||||||
08.07.2004, 14:20 | Poff | Auf diesen Beitrag antworten » | |||||
RE: 2 Kreis mit einer Linie Verbinden, vom Rand der Kreise aus Sei der Mittelpunkt von Kreis1 M1(x1,y1), der Radius r1 und m die Steigung der Verbindungsgeraden der Mittelpunkte beider Kreise, dann müsste der zur Verbindungslinie zugehörige Kreisperipherie- punkt P1 folgende Koodinaten haben P1(x1 +-? r1/sqrt(1+m²) | y1 +-? r1*m/sqrt(1+m²)) ob die Additionstherme zu x1 und y1 hinzuaddiert oder subtrahiert werden müssen hängt von der relativen örtlichen Lage von Kreis M2 zu M1 ab ... |
|||||||
08.07.2004, 14:46 | Raphi | Auf diesen Beitrag antworten » | |||||
danke das du dir dafür Zeit genommen hast, aber jetzt hab ich noch das Problem das ich die Steigung nicht wirklich weiss, oder halt erst noch berechnen muss... Also müsste man jetzt noch raus bekommen, wie die Steigung einer Geraden ist, welche durch die 2 Kreismittelpunkte geht. |
|||||||
08.07.2004, 15:32 | Poff | Auf diesen Beitrag antworten » | |||||
m = (y2-y1)/(x2-x1) dabei sind x2, y2 sind die Mittelp.koord. von Kreis2. |
|||||||
08.07.2004, 15:34 | Raphi | Auf diesen Beitrag antworten » | |||||
Andere Lösung gefunden Hallo zusammen nochmal, habe jetzt eine Lösung selber gefunden. Durch folgendes Dokument bin ich dann auch den "richtigen" Weg gekommen ;-). Vectorgeometrie - Gerade 3 Dabei war Kapitel 2: Teilpunkte einer Strecke und die nachfolgende Aufgabe Ausschlaggebend für meine Lösung. Im Prinzip lässt sich die Lösung mit der von mir oben dargestellten Gerade berechnen, so das statt dem Faktor t einfach folgendes Eingesetzt wird: Radius des Kreises geteilt durch Distanz zwischen den beiden Kreismittelpunkten. Und damit alle was von der Lösung haben, hier nochmal ein Testprogramm von mir, in dem man den Berechnungsweg hoffentlich sehen kann :-) PS: Wenn wer eine Lösung hätte, die weniger Rechenaufwand fordert, bin ich immer für zu haben... hoffe auch das der Code unter Mathematikern verständlich ist :-)
PPS: hoffe ich hab jetzt keinem zu viel Zeit weggenommen, der sich evtl. mit dem Problem beschäftigt hat ;-) |
|||||||
08.07.2004, 15:37 | Raphi | Auf diesen Beitrag antworten » | |||||
@Poff: danke für deine Mühe. Hab aber vor deinem letzten Post meine letzte Version realisiert bekommen... was meinst du, ist deine schneller in der berechnung oder soll ich meine benutzten... rein vom rechenaufwand her gesehen (denke das 2 mal ne Wurzel und noch nen Quadrat teurer kommen wie nur Grundrechenarten, oder?) |
|||||||
Anzeige | |||||||
|
|||||||
08.07.2004, 16:02 | Poff | Auf diesen Beitrag antworten » | |||||
... nur mit 'Grundrechenarten', kannst du mit Verlaub die Lösung nicht bekommen, denn das würde ja bedeuten, dass die Wurzel ohne Wurzel dargestellt werden könnte ... das kann aber nicht sein. Die Wege dahin können verschieden sein, aber die expliziten exakten Lösungen müssen notgedrungenerweise äquivalente Wurzeln enthalten, welche im Spezialfall nätürlich auch rational auflösbar sein können. ich hab mir gerade deine Sache mal angesehen, die erscheint mir richtig und löst nebenbei noch das 'Problem des Vorzeichens', davon ab muss es äquivalent sein zu dem von mir geposteten. Bei dir steckt die Wurzel in der Berechnung der Distanz verborgen. |
|||||||
08.07.2004, 16:27 | Raphi | Auf diesen Beitrag antworten » | |||||
hm... warscheins wird dann die wurzel bei mir in der Funktion zur Distanz stecken, das ist das einzige das ich einfach benutze, ohne es zu verstehen ;-) |
|||||||
08.07.2004, 16:34 | Raphi | Auf diesen Beitrag antworten » | |||||
*lach* ok.. hab deinen Edit wohl erst zu spät gesehen... also.. nochmal vielen dank für deine Mühe... ich schau mal das ich mich hier auch mal anmelde, da ich hier warscheins öfters mal ne frage hab... muss noch viele zeichnungssachen machen. und dabei wird immer wieder mal ne Rechnung auftauchen @ Poff PS: bist du Professor? oder in Mathestudent dem es langweilig ist? PPS: ich bin grad im Praxissemester für mein Informatik - SoftwareEngineering Studium. |
|||||||
08.07.2004, 16:42 | Poff | Auf diesen Beitrag antworten » | |||||
*lol* ... 'langweilig' ist im weiteren Sinne richtig *gg* dann prog. mal tapfer weiter ... |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
Die Neuesten » |