Gerade schneidet Kreis |
| 10.01.2012, 18:36 | Jango | Auf diesen Beitrag antworten » |
| Gerade schneidet Kreis ich hab folgendes Problem, und bin leider schon so 4 Jahre aus Mathe draußen und tue mir da mit ein paar Themen schwer. Es geht um folgends... Ich hab einen Punkt A und B im Koordinatensystem. Um Punkt A befindet sich ein Kreis mit Radius R, welcher die Gerade zwischen A und B schneidet. Mein Problem ist gerade hier den Schnittpunkt zu berechnen zwischen der Gerade und den Schnittpunkt, vorallem deswegen weil ich dieses in Code in einem Programm abbilden will. Bis jetzt bin ich soweit das ich die Geradengleichung aufstellen kann, allerdings weiss ich nicht wie ich die Kreisgleichung erstelle, um dann die Geradengleichung in Y einzufügen. Und dann wüsste ich auch nicht, wie ich diese Gleichung bestehend aus der Kreis und Geradegleichung so auflöse, das ich es codetechnisch abbilden kann. Ja ich weiss, mir fehlen hier grundlegende Kenntnisse wieder, für das Vorgehen nur wüsste ich gerade auch nicht, wonach ich suchen soll als Hilfestellung. Deswegen meine Fragen hier. Für nützliche & informative Tipps wäre ich echt sehr dankbar. |
||
| 10.01.2012, 19:29 | Jango | Auf diesen Beitrag antworten » |
Okay hab jetzt in einem Java-Forum die Lösung gefunden, welche auch passt public class Schnittpunkte extends JPanel implements MouseMotionListener{ private Gui gui = new Gui(); public Schnittpunkte(){ this.add(gui); this.addMouseMotionListener(this); } public void mouseDragged(MouseEvent arg0) { // TODO Auto-generated method stub } public void mouseMoved(MouseEvent me) { this.gui.setMousePos(me.getX(), me.getY()); calculateIntersection(); this.gui.repaint(); } private void calculateIntersection(){ int kreisXint = this.gui.getKreisX(); int kreisYint = this.gui.getKreisY(); int radiusint = this.gui.getRadius(); int mouseXint = this.gui.getMousePosX(); int mouseYint = this.gui.getMousePosY(); double kreisX = Double.valueOf(Integer.toString(kreisXint)); double kreisY = Double.valueOf(Integer.toString(kreisYint)); double radius = Double.valueOf(Integer.toString(radiusint)); double mouseX = Double.valueOf(Integer.toString(mouseXint)); double mouseY = Double.valueOf(Integer.toString(mouseYint)); // es gibt immer 2 Schnittpunkte double schnittX1 = 0.0; double schnittY1 = 0.0; double schnittX2 = 0.0; double schnittY2 = 0.0; // Steigung g_m double g_m = 0.0; if(mouseX - kreisX == 0){ g_m = 1f; }else{ g_m = (mouseY - kreisY) / (mouseX - kreisX); } // g_b aus Geradengleichung y = m*x + b double g_b = kreisY - (g_m * kreisX); // gleichsetzen mit Kreisgleichung: m*x + b = yK + sqrt(r^2 - (x - xK)^2 // a, b, c der MNF: x^2 * (1 + m^2) + x * (2*m*b - 2*m*yK - 2*xK) + b^2 - 2*b*yK + yK^2 - r^2 + xK^2 = 0 double a = 1 + (g_m * g_m); double b = (2 * g_m * g_b) - (2 * g_m * kreisY) - (2 * kreisX); double c = (g_b * g_b) - (2 * g_b * kreisY) + (kreisY * kreisY) - (radius * radius) + (kreisX * kreisX); // MNF der Schnittpunkte 1 und 2 schnittX1 = (-b + Math.sqrt((b*b) - (4*a*c))) / (2*a); schnittX2 = (-b - Math.sqrt((b*b) - (4*a*c))) / (2*a); schnittY1 = (g_m * schnittX1) + g_b; schnittY2 = (g_m * schnittX2) + g_b; this.gui.setIntersection1Pos((int)schnittX1, (int)schnittY1); this.gui.setIntersection2Pos((int)schnittX2, (int)schnittY2); } } |
||
|
|
Verwandte Themen
| Die Beliebtesten » |
| Die Größten » |
|
| Die Neuesten » |
|
