Berechnung der Schnittpunkte Gerade Kreis (in C++!)

Neue Frage »

Enomine Auf diesen Beitrag antworten »
Berechnung der Schnittpunkte Gerade Kreis (in C++!)
Hi,

Aufgabe ist es die Schnittpunkte und die Schnittpunktanzahl zu berechnen.

Vorgegeben ist vom Kreis der Mittelpunkt und der Radius. Von der Geraden bekommen wir den Start und die Richtung jeweils in Koordinaten.

Ich benutzte die Anleitung unter Link 1.
Dazu habe ich die Gerade von der Zweipunkteform in die Koordinatenform gebracht nach der Anleitung in Link 2.

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:
	//Zweipunkteform in Korrdinatenform bringen
	float a = pointLine[1] - lineDirection[1];
	float b = lineDirection[0] - pointLine[0];
	float c = lineDirection[0] * pointLine[1] - pointLine[0] * lineDirection[1];
	
	// d = c-ax0 - by0
	float d = c - a*m_centerCircle[0] - b*m_centerCircle[1];
	float dsquare = d*d;
	float innerterm = (a*a + b*b);
	float leftterm = m_circleRadius * m_circleRadius * innerterm;
	
	if (leftterm >= dsquare) { //2 Schnittpunkte
		m_computedIntersectionPoints = 2;
		float sqrtterm = sqrt(leftterm - dsquare);
		float x1 = m_centerCircle[0] + ((a*d + (b * sqrtterm)) / innerterm);
		float x2 = m_centerCircle[0] + ((a*d - (b * sqrtterm)) / innerterm);
		float y1 = m_centerCircle[1] + ((b*d + (a * sqrtterm)) / innerterm);
		float y2 = m_centerCircle[1] + ((b*d - (a * sqrtterm)) / innerterm);
		m_intersectionPoints[0][0] = x1;
		m_intersectionPoints[0][1] = y1;
		m_intersectionPoints[1][0] = x2;
		m_intersectionPoints[1][1] = y2;
	}
	else {
		if (leftterm - dsquare < 0.001f) { // ein Schnittpunkt
			m_computedIntersectionPoints = 1;
			float sqrtterm = sqrt(leftterm - dsquare);
			float x1 = m_centerCircle[0] + ((a*d + (b * sqrtterm)) / innerterm);
			float y1 = m_centerCircle[1] + ((b*d + (a * sqrtterm)) / innerterm);
			m_intersectionPoints[0][0] = x1;
			m_intersectionPoints[0][1] = y1;
		}
		else { // kein Schnittpunkt
			m_computedIntersectionPoints = 0;
		}
	}


Ich habe ein Programm von meinem Professor, welches den Kreis und die Gerade im Programm anzeigt. Die Schnittpunkte die ich berechne werden auch angezeigt. Diese passen aber leider nicht.

Was ist der Fehler im Programm?

Danke - Enomine


Link 1 = https://de.wikipedia.org/wiki/Schnittpun...mit_einem_Kreis
Link 2 = https://de.wikipedia.org/wiki/Koordinate..._Zweipunkteform
mYthos Auf diesen Beitrag antworten »

Hi!
Programmfehler suchen wir nicht hier in der Sektion Geometrie.
Ich verschiebe dies mal ins entsprechende Unterforum.

Aus Geometrie *** verschoben ***

mY+
Steffen Bühler Auf diesen Beitrag antworten »
RE: Berechnung der Schnittpunkte Gerade Kreis (in C++!)
Zitat:
Original von Enomine
Von der Geraden bekommen wir den Start und die Richtung jeweils in Koordinaten.
...
Dazu habe ich die Gerade von der Zweipunkteform in die Koordinatenform gebracht nach der Anleitung in Link 2.


Wenn ich das richtig verstanden habe, sind aber nicht zwei Punkte der Geraden gegeben, sondern nur ein Punkt und die Richtung.

Viele Grüße
Steffen
HAL 9000 Auf diesen Beitrag antworten »

Genau, der Code sieht zumindest in den ersten 12 Zeilen so aus, als hätte die Bedeutung eines Normalenvektors der vorgegebenen Gerade (etwa für HNF o.ä.). In dem Fall müsste es aber (wenn ich die Variablennamen richtig deute) richtigerweise nur

code:
1:
2:
float a = -lineDirection[1];
float b = lineDirection[0];
lauten. Was weiter unten passiert, habe ich mir noch nicht angeschaut.
Neue Frage »
Antworten »



Verwandte Themen

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