2 Kreis mit einer Linie Verbinden, vom Rand der Kreise aus

Neue Frage »

Raphi Auf diesen Beitrag antworten »
2 Kreis mit einer Linie Verbinden, vom Rand der Kreise aus
Servus zusammen ihr Matheprofis Wink

Hab euch hier über Google gefunden... Hab da ein Problem (für euch wahrscheinlich ein kleines Augenzwinkern ). 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.
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 ...


smile
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.
Poff Auf diesen Beitrag antworten »

Zitat:
Also müsste man jetzt noch raus bekommen, wie die Steigung einer Geraden ist, welche durch die 2 Kreismittelpunkte geht.


m = (y2-y1)/(x2-x1)

dabei sind x2, y2 sind die Mittelp.koord. von Kreis2.


smile
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 :-)

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;

/**
 * File:    TestApplication.java
 * Project: Test Project
 * Created: 08.07.2004 - 14:57:01
 * 
 * @author Raphael Ederleh
 */
public class TestApplication extends JFrame
{

	public TestApplication( )
	{
		super( "Test: 2 Kreise und eine Verbindung" );
		
		JPanel tmpPanel = new JPanel( )
		{
			protected void paintChildren( Graphics g )
			{
				setBackground( Color.WHITE );
				
				//--- Gegeben ---
				// 2 Knoten & Verbindung: n1, n2, v
				Ellipse2D.Double n1 = new Ellipse2D.Double( 30, 30, 50, 50 );
				Ellipse2D.Double n2 = new Ellipse2D.Double( 150, 200, 50, 50 );
				Line2D.Double v = new Line2D.Double( );
		
				//--- Berechnung ---
				// Mittelpunkte der 2 Knoten: (x1,y1), (x2,y2)
				double x1 = n1.getCenterX( );
				double y1 = n1.getCenterY( );
				double x2 = n2.getCenterX( );
				double y2 = n2.getCenterY( );
		
				// Entfehrnung der Mittelpunkte voneinander: d
				double d = Point2D.distance( x1, y1, x2, y2 );
		
				// Radius der Knoten: r
				double r = n1.getWidth( ) / 2.0;
		
				// Schnittpunkt der Geraden mit dem Knotenaussenkreis: s1, s2
				Point2D.Double s1 = new Point2D.Double(
					x1 + r/d * (x2-x1),
					y1 + r/d * (y2-y1)
				);
	
				Point2D.Double s2 = new Point2D.Double(
					x2 + r/d * (x1-x2),
					y2 + r/d * (y1-y2)
				);
	
				//--- Ergebnis ---
				// Verbindung neu setzten: Start-/Zielpunkt setzten
				v.setLine( s1, s2 );
	
				Graphics2D g2d = (Graphics2D)g;
			
				g2d.draw( n1 );
				g2d.draw( n2 );
				g2d.draw( v );
			}
		}; // END - getContentPane( ).add( new JPanel( ) { /*...*/ });
		
		tmpPanel.setPreferredSize( new Dimension( 300, 350 ) );
		getContentPane( ).add( tmpPanel );
		pack( );
		setLocationRelativeTo( null );
	} // END -  public TestApplication( )

	public static void main( String[] args )
	{
		new TestApplication( ).setVisible( true );
	}
}


PPS: hoffe ich hab jetzt keinem zu viel Zeit weggenommen, der sich evtl. mit dem Problem beschäftigt hat ;-)
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?)
 
 
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.


smile



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.
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 ;-)
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

Gott @ Poff

PS: bist du Professor? oder in Mathestudent dem es langweilig ist?

PPS: ich bin grad im Praxissemester für mein Informatik - SoftwareEngineering Studium.
Poff Auf diesen Beitrag antworten »

*lol*

... 'langweilig' ist im weiteren Sinne richtig *gg*


dann prog. mal tapfer weiter ...


smile
Neue Frage »
Antworten »



Verwandte Themen

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