0 Daumen
1,4k Aufrufe
Man stelle sich eine Uhr mit 60 Minuten vor, also einen Kreis mit 60 Schnittpunkten einer Geraden, die durch den Mittelpunkt geht.

Gegeben ist die X- und Y-Koordinate des Mittelpunktes des Kreises und der Radius. Und wir wissen natürlich, dass die Gerade jeweils um 6 Grad weitergedreht werden muss, um die nächste Sekunde anzuzeigen (360 Grad / 60 Minuten).

Nun suche ich die allgemeine Formel zur Berechnung der 60 Schnittpunte von der Geraden mit dem Kreis.
Avatar von

2 Antworten

0 Daumen
 
Beste Antwort

Bild Mathematik

input : r
input : xm
input : ym
for a := 0 to 359 do
  if a mod 6 = 0 then  { nur alle 6 Grad }
    begin
    x:= sin(a) * r ;
    y := cos(a) * r;
    xg:= x + xm;
    yg:= y + ym;
    output(xg);
    outpu(yg);
    end;

Variable:
r : Radius
xm Kreismittelpunkt
ym Kreismittelpunkt
xg Gesamtkoordinate
yg Gesamtkoordinate

mfg Georg

Avatar von 123 k 🚀


So sieht mein konkretes Beispiel aus (Javascript):

var r = 1.762;
var xm = 17.11979;
var ym = -21.62109;

for (a = 0; a < 360; a++) {
  if(a%6 == 0) {
    x = Math.sin(a) * r;
    y = Math.cos(a) * r;
    xg = x + xm;
    yg = y + ym;
  }
}

Das Ergebnis ist schon gar nicht schlecht, aber irgendetwas stimmt nocht nicht...

Ich zeichne Linien vom Mittelpunkt zum Schnittpunkt mit dem Kreis:

Bild Mathematik

Javascript kenne ich nicht:

Der Quelltext ist ja meinem nicht unähnlich.
Es " fehlen " nur einige Linien.

Kannst du den Programmverlauf verfolgen
( Debugger ).
Oder kannst du die Werte xg  | yg, wie sie in
der Schleife erzeugt werden, einfach einmal
ausdrucken oder anzeigen ?

Programmieren ist
5 % Zeit fürs Geniale/Kreative
30 % Quelltext schreiben
65 % Fehlersuche.

You made my day!!!
Vielen Dank für deine Hilfe!

Nachdem ich händisch nachgerechnet habe und auf andere Werte gekommen bin als das Script, habe ich herausgefunden, dass Javascript davon ausgeht, dass der Input für die Funktion Math.sin(a) Bogenmaß ist und nicht eine Gradzahl (das Gleiche gilt für Math.cos(a)):
http://stackoverflow.com/questions/8154794/javascript-sin-function-issue


Darauf muss man erstmal kommen ;-)

Jetzt sieht es alles super aus ;-)

Bild Mathematik

Hier noch der funktionierende Javascript Code:

Math.dsin = function() {
  var piRatio = Math.PI / 180;
  return function dsin(degrees) {
    return Math.sin(degrees * piRatio);
  };
}();

Math.dcos = function() {
  var piRatio = Math.PI / 180;
  return function dcos(degrees) {
    return Math.cos(degrees * piRatio);
  };
}();

var r = 1.762;
var xm = 17.11979;
var ym = -21.62109;

for (a = 0; a < 360; a++) {
  if(a%6 == 0) {
    x = Math.dsin(a) * r;
    y = Math.dcos(a) * r;
    xg = x + xm;
    yg = y + ym;
  }
}

Darauf muss man erstmal kommen ;-)

Es war, so wie in der EDV oft, nur eine
" Kleinigkeit " an der es gehakelt hat.

Es ist auch eine ansprechende Uhr entstanden.

0 Daumen

$$y = x \cdot \arctan(k \cdot \frac\pi {30}) $$$$  k \in \mathbb{N}   $$$$y = \pm \sqrt{1-x^2} $$

Avatar von
Besten Dank für deine schnelle Antwort!

Kannst du mir noch ein- zwei erklärende Sätze dazu geben?

Hier mal konkrete Werte:
Mittelpunkt x = 17
Mittelpunkt y = 21
Radius = 5

Ich bin mal der Einfachheit halber vom Mittelpunkt im Ursprung und dem Radius 1 ausgegangen.

Die obere Gleichung ist eine Gerade durch den Ursprung mit der Steigung k pro Minute.

Die untere Gleichung ist die Kreisgleichung M=(0,0) und r=1

Danke dir!

Da ich die Formel in eine automatische Berechnung in ein Programm einbauen muss und der Mittelpunkt an einem beliebigen Ort liegen kann, wäre es toll, wenn du mir noch in diese Richtung einen Tipp geben könntest. Also eine Formel, in die ich nur die Koordinaten des Mittelpunktes und den Radius des Kreises eingeben kann.

Man könnte ja die Berechnung der Schnittpunkte mit einer senkrechten Gerade beginnen und sie dann um 6 Grad weiterdrehen...

Bin für jeden Input dankbar! :-)

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Mathelounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community