Gerade schneidet Kreis

Neue Frage »

Jango Auf diesen Beitrag antworten »
Gerade schneidet Kreis
Hallo Zusammen,

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

}
}
Neue Frage »
Antworten »



Verwandte Themen

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