0 Daumen
870 Aufrufe

Frage:

Ich habe einen Kreis mit unterschiedlichen Quadranten und Radii und möchte die Koordinaten innerhalb des Quadranten bzw. Kreissegment berechnen. Der Sachverhalt ist im folgenden Bild zu sehen. Allerdings finde ich keine passende Formel um die Koordinaten zu berechnen.

geogebra-exportneue.png

Code:

Bis lang bin ich soweit. Ich habe folgendes in einer Funktion definiert.

    const startAngle = this.calcQuadrantAngle(indexQuadrant, numOfQuadrants, ANGLE_START);
  const endAngle = this.calcQuadrantAngle(indexQuadrant, numOfQuadrants, ANGLE_END);
  const innerRadius = this.calcRingRadius(indexRing, numOfRings, RADIUS_START);
  const outerRadius = this.calcRingRadius(indexRing, numOfRings, RADIUS_END);

  const minRadius = innerRadius + this.blipWidth;
  const maxRadius = outerRadius - this.blipWidth;


  const getRandomRadius = this.getRandom(minRadius, maxRadius);

  const minAngle = startAngle;
  const maxAngle = endAngle;

  const getRandomAngle = this.getRandom(startAngle, endAngle);

  const x = this.center() + getRandomRadius * Math.sin(getRandomAngle);

  const y = this.center() + getRandomRadius * ((-Math.cos(getRandomAngle)));


Meine Berechnung zur X bzw. Y coordinate sind aber falsch und ich habe keine Ahnung wieso. Ich freue mich auf Unterstützung.

Auch sollte in der Berechnung von x und y nicht normalerweise Math.cos für x bzw Math.sin für y stehen?

Ich hab es propiert, aber das Ergebnis wird schlimmer.

Avatar von

Hallo rumrechnen007

Schätze mal, das einfachste ist den Kreismittelpunkt(A) und dann die Punkte E,F,G,H,I,J,K kartesisch einzugeben. Zumindest Punkt A, dann als Startpunkt E oder einen anderen Punkt, der genau auf den äußersten Kreis sitzt. Dann den Polarradius und Winkel zur X-Achse berechnen.

Du könntest aber über ein Array die Winkel fest speichern (90, 150, 210, 270, 300 Grad).

Dann die Radien für die Punkte C und D berechnen.

Der Rest über Schleifen abfrageen.

Hast du eigentlich berücksichtigt, das zumindest in c und c++ die sin, cos und tan-Funktion den Winkel im Bogenmaß braucht? Di Funktionen atan, asin, und acos geben den Winkel im Bogenmaß zurück, nicht in Grad(=Altgrad 0 - 360° beim Vollkreis).

double radtograd(double boma)
{
double grad, pi = 3.141592653589793;

grad = ((boma * 180) / pi);
return grad;
}

// Wandelt grad in Bogenmass um
double bogenmass(double grad)
{
double boma, pi = 3.141592653589793;

boma = (grad * pi)  / 180;
return boma;

Bei der Umrechnung von Sinus Cosinus und Tangens zu Winkel geht übers Bogenmaß.

Beispiel:

double Winkel_aus_tanwert(double tanwert)
{
double boma = atan(tanwert);
double Winkelhalbe = radtograd(boma);

return Winkelhalbe;
}
double Winkel_aus_sinwert(double sinwert)
{
double boma = asin(sinwert);
double Winkelhalbe = radtograd(boma);

return Winkelhalbe;
}

double Winkel_aus_coswert(double coswert)
{
double boma = acos(coswert);
double Winkelhalbe = radtograd(boma);

return Winkelhalbe;
}

Sind insgesamt 18 verschiedene Felder. Also zuerst Radius errechnen .Dann feststellen,

in welchen Kreisring der Punkt fällt. Dann über den Winkel das gesuchte Feld identifizieren.

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Berechnung der Koordinaten in einem Kreissegment

Die Berechnung von Koordinaten innerhalb eines Kreissegments basiert auf dem Verständnis von Kreisgeometrie und trigonometrischen Funktionen.

Wenn du einen Punkt innerhalb eines Kreissegments bestimmen möchtest, benötigst du die folgenden Informationen:
- Den Mittelpunkt des Kreises \((x_m, y_m)\)
- Den Radius des Kreises \(r\)
- Den Winkelbereich des Kreissegments, gewöhnlich definiert durch einen Startwinkel \(\theta_{start}\) und einen Endwinkel \(\theta_{end}\)

Für die Umrechnung von Polarkoordinaten (Radius \(r\) und Winkel \(\theta\)) in kartesische Koordinaten (x, y) kannst du die folgenden Formeln verwenden:
\(x = x_m + r \cdot \cos(\theta)\)
\(y = y_m + r \cdot \sin(\theta)\)

In deinem Code-Ausschnitt scheinen allerdings einige sachliche Irrtümer und Missverständnisse aufzutreten. Zunächst wird richtig angemerkt, dass normalerweise die Berechnung von \(x\) den Cosinus des Winkels und die Berechnung von \(y\) den Sinus des Winkels verwendet.

Analyse deines Codes

Dein Code scheint sich mit der Berechnung von Punkten innerhalb eines Kreissegments zu beschäftigen, wofür du zufällige Radien und Winkel innerhalb gegebener Grenzen generierst. Dabei machst du jedoch den Fehler, die Berechnung von \(x\) und \(y\) falsch zu verknüpfen. Prüfen wir folgendes:

javascript
const x = this.center() + getRandomRadius * Math.sin(getRandomAngle);  // Hier sollte eher Cosinus verwendet werden
const y = this.center() + getRandomRadius * ((-Math.cos(getRandomAngle)));  // Hier sollte Sinus verwendet werden, ohne Negation


Diese Berechnung ist geometrisch inkorrekt, wenn du x und y Koordinaten in einem kartesischen Koordinatensystem berechnen möchtest. Für gewöhnlich wird \(x\) mit dem Cosinus und \(y\) mit dem Sinus des Winkels berechnet.

Korrigierter Ansatz

javascript
const x = this.center() + getRandomRadius * Math.cos(getRandomAngle);
const y = this.center() + getRandomRadius * Math.sin(getRandomAngle);


Vergewissere dich, dass getRandomAngle im Bogenmaß ausgedrückt wird, da die Math.sin() und Math.cos() Funktionen in JavaScript mit Bogenmaß arbeiten. Falls deine Winkel in Grad sind, musst du diese zuerst in Bogenmaß umrechnen:

javascript
const angleInRadians = getRandomAngle * Math.PI / 180;


Dann verwendest du angleInRadians in den Berechnungen anstelle von getRandomAngle.

Zusammenfassung

- Korrigiere die Verwendung von Sinus und Cosinus bei der Berechnung von \(x\) und \(y\).
- Stelle sicher, dass die Winkel in Bogenmaß verwendet werden.
- Überprüfe, ob this.center() die korrekten \(x_m\) und \(y_m\) Werte liefert, da es zweimal verwendet wird und impliziert, dass der Kreismittepunkt sowohl in \(x\) als auch in \(y\) gleich ist.

Diese Anpassungen sollten die korrekte Berechnung der Koordinaten innerhalb des spezifizierten Kreissegmentes ermöglichen.
Avatar von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community