Programmierung eines Kreises

Wenn ich davon ausgehe, es gibt ein Koordinatensystem (x/y). Wie programmiert man, dass sich ein Punkt um den Koordinatenursprung kreisförmig bewegt?
Eine Funktionsgleichung geht ja nicht, weil es x-Werte gibt, denen mehrere y zugewiesen werden können (bspw. x=0).

Vielen Dank


x = r cos(alfa)
y = r sin(alfa)

r^2 = x^2 +y^2

Hallo Claudi,

Wenn ich davon ausgehe, es gibt ein Koordinatensystem (x/y).

wenn es nicht logarithmisch o.ä. aufgebaut ist so hat des den sogenannten Ursprung, x=0, y=0.
Darauf bezogen kannste mit Winkelfunktionen wie sin, cos usw. um den Ursprung herum einen Kreis zeichnen. lassen.

Der andere Antworter zeigte da ja schon konkrete Formeln, ungeprüft aber werden wohl stimmen.
Damit kannste deine Kreis fast schon zeichnen lassen.

„fast“ bedeutet, du weißt wie du den Kreis zeichnen lassen kannst aber wohin, das kann von der Bezugsfläache au der er erscheinen soll sehr abhängen.

Konkretes Beispiel. In Excel kannste per Vba dir einen kreis zeichnen lassen, du mußt nur x,y Koordinaten und Radius angeben.
Koordinaten wie 0;0 sind kontaeproduktiv, denn für Excel hat die linke obere Ecke des benutzbaren Bereiches die Koordinaten 0,0. (Pixel)

Um jetzt dort also einen Kreis zu zeichnen von 100 Pixeln Radius, gib hat für den Ursprung des Kreises x=200, y=200 an.
Dann siehste den Kreis. Das gilt für Excel bzw. Excel-Vba.

Andernorts mußte schauen wo dort, auf die Darstellung bezogen der Urspriung liegt, also 0,0, vielleicht unten links, dann mußte wie bei Excel mit Offsets „arbeiten“ um den Kreis zu sehen.

Wie programmiert man, dass sich ein Punkt um den
Koordinatenursprung kreisförmig bewegt?

Wie schon gesagt, durch Winkelfunktionen oder wenn vorhanden eingebaute Funktionen wie Circle(x,y,Radius). Wen mit Winkelfunktionen, umso kleiner der Abstand zwischen den „Winkelgraden“ desto genauer wird der Kreis gezeichnet im Rahmen des an dem PC technisch möglichem.

Eine Funktionsgleichung geht ja nicht, weil es x-Werte gibt,
denen mehrere y zugewiesen werden können (bspw. x=0).

Bin kein Mathematiker, sollen Experten prüfen ob du bei allem was schon gesagt wurde damit Recht hast, k.A.

Gruß
Reinhard

'tschuldigung für die blöde Frage, aber was genau willst du programmieren und in welcher Sprache/Umgebung???

Gruß
Christa

Wenn ich davon ausgehe, es gibt ein Koordinatensystem (x/y).
Wie programmiert man, dass sich ein Punkt um den
Koordinatenursprung kreisförmig bewegt?

Eine Funktionsgleichung geht ja nicht, weil es x-Werte gibt,
denen mehrere y zugewiesen werden können (bspw. x=0).

Hallo Claudi,

dann nimm „zwei“ Gleichungen:
y1 = + Wurzel (r² - x²)
y2 = - Wurzel (r² - x²)

Hier mal kurz mit einem Excel-Diagramm dargestellt:
http://www.pic-upload.de/view-21276595/kwKreis.jpg.html

Gruß
Reinhard

Hallo!
Ein einfacher Weg ist, in einer Schleife den Bereich von 0-360° (bzw. 0-2π) zu durchlaufen und die X-Koordinate des Punktes aus sin(φ) und die Y-Koordinate aus cos(φ) zu berechnen.

Pseudocode:
radius = 100
for phi = 0 to 2 * pi step 0.01
drawpoint(radius * sin(phi), radius * cos(phi))

So in etwa.

Gruß,
Martin

In der Methode „berechne“ werden die Koordinaten des Kreises berechnet, der Rest ist zum Zeichnen in einem einfachen Programmfenster da. (Original von Prof. H. Grassmann). Es wird die Symmetrie des Kreises benutzt, um den Vollkreis mit den Koordinaten eines Achtelkreises, d.h., dem Abschnitt unter der Diagolen des ersten Quadranten, zu zeichnen.

Gruß, Lutz

import HUMath.Algebra.\*;
import javax.swing.\*;
import java.awt.\*;

final class kreis extends JFrame
{
 public static void main(String args[])
 {
 (new kreis("Planet")).simulation();
 }

 int mx, my, r;

 void simulation() {
 while(1==1) {
 try {

 if (mx==600) mx=0; mx++;
 my = 5\*(mx-300)\*(mx-300)/1000 +100;
 r = abs(30-mx/10);

 repaint();
 Thread.sleep(80+3\*r);

 } catch(InterruptedException e){
 }
 }
 }

 static int abs(int a)
 {
 if (a \>= 0) return a; else return -a;
 }



 public kreis(String title){
 setDefaultCloseOperation(JFrame.EXIT\_ON\_CLOSE);
 setBackground(Color.white);
 setSize(600,600);
 setVisible(true);
 }


 protected int[] berechne(int r)
 {
 int y, a, s = abs(707\*r/1000+1), x[] = new int[s];
 x[0] = r;
 for (y = 1; y 

Hallo Claudi,
mir kommen fünf Ansätze in den Sinn:

  • euklidsche Geometrie (Pythagoras)
  • lineare Algebra
  • Vektorgeometrie
  • Komplexe Zahlen
  • Kreisgleichung und Transformation Polarkoordinaten->Kartesische Koordinaten (wie auch immer man diese Disziplin nennt)

Die Ansätze lassen sich nicht immer klar abgrenzen, was nicht erstaunt, da sie alle das gleiche, den Raum, beschreiben. Zu allen findest du im Inhaltsverzeichnis eines entsprechenden Mathebuches (oder mit google) das Stichwort „Kreis“. Praktische Lösungen dazu haben meine Vorredner teilweise schon beschrieben, wobei sich, wegen der genannten Überschneidungen, nicht jede eindeutig einem bestimmten Ansatz zuordnen lässt.
Lutzs Lösung habe ich kurz nachgeschlagen, sie wird von der HU Berlin zum Download bereitgestellt (Grasmann, Hubert 2010: „Was können Computer ?“). Er erklärt Methoden zur Optimierung für Maschinen anhand des Beispieles eines Kreises bzw. einer Ellipse, durchaus lesenswert, danke für die Quellenangabe, Lutz.

Verwendest du ein vorgefertigtes Grafikpaket, das Kreissegmente darstellen kann, gibt es noch eine faule Lösung: Lasse ein Kreissegment mit nur einem Pixel Länge zeichnen und inkrementiere über den Winkel.

Gruss
Berchthold

Yep,

bzw. dessen Kursmaterial zu „Wissenschaftliches Rechnen“ bzw. „Mathematikorientierte Compurernutzung“, auch „Computermathematik“ oder „CoMa“ genannt.

Beachte, dass meine Variante durch einige subtile Änderungen (u.a. durch Hinweise von zetcode.com) flacker- und ruckelfrei funktioniert und auch tatsächlich das Fenster geschlossen werden kann.

(import HuMath… ist nicht notwendig)

Gruß, Lutz

Danke für den Hinweis, Lutz! Da ich zeitkritische Grafikausgabe tunlichst zu vermeiden versuche, ist dieses Thema für mich lediglich ein Trainingsgelände. Umsomehr freue ich mich riesig drauf, das genauer unter die Lupe zu nehmen, besonders deine Improves.
Den Rest der von dir empfohlenen Materialien werde ich so bald wie möglich saugen. Hab schon oft genug erlebt, dass plötzlich Zugriffsbeschränkungen auf zuvor öffentlichen Inhalte waren.

Gruss
Berchthold