Forum: Compiler & IDEs Einfache Kreisberechnung


von Matthias L. (mcl024)


Lesenswert?

Hallo ich habe folgenden Code geschrieben um die x und y Werte eines 
Kreises zu berechnen.
Schaue ich mir die Ausgabe vom printf in der Console an, beginnt er mit
x= 4.69 und y=8.83. Ich erwarte aber x=10.00 und y=0.00.

Könnte es vielleicht daran liegen das mir die Konsole nicht alles 
anzeigt, oder so? Denn wenn z.B. nur 100 Werte darstelle beginnt er wie 
gewünscht.

Vielleicht könnt ihr mir weiter helfen. Ich verstehe es nicht.

Vielen Dank schon im vorraus.

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <math.h>

#define PI 3.141592

int main(void)
{
  float x;
  float y;
  float radius=10;
  float a;

  for(a=0;a<361;a++)
  {
    x=cos(a*PI/180)*radius;
    y=sin(a*PI/180)*radius;
    printf(" %.2f  %.2f\n\r",x,y);
  }
  system("PAUSE");
  return 0;
}

von joemu (Gast)


Lesenswert?

Hallo

liegt es vielleicht daran, dass du den Schleifenindex a als float und 
nicht als int deklariert hast?

Gruss

von Matthias L. (mcl024)


Lesenswert?

Nein daran liegt es nicht. Würde ich auch nicht verstehen wenn es daran 
liegen würde. Die Schleife beginnt bei 0 egal ob float oder int. So weit 
wie ich das verstanden habe.
Aber trotzdem schonmal Vielen Dank

von Jörg (Gast)


Lesenswert?

Wird vieleicht eine Ausgabezeile verschluckt (die 0-te)?

von Matthias L. (mcl024)


Lesenswert?

Ne denke ich auch nicht. Wenn nur die 0-te fehlt dann würde ich erwarte 
das
x=9.9 und y=0.1 als erstes auf der Console steht.

von yalu (Gast)


Lesenswert?

> Könnte es vielleicht daran liegen das mir die Konsole nicht alles anzeigt,
> oder so? Denn wenn z.B. nur 100 Werte darstelle beginnt er wie gewünscht.

Ja. Wie groß ist denn deine Konsole bzw. deren Rückspulpuffer? 300
Zeilen?

Das Programm ist ansonsten ok.

von ich (Gast)


Lesenswert?

Es werden zu viele Ergebnisse ausgegeben, so dass nicht mehr alle in der 
Konsole angezeigt werden.

printf("%.0f %.2f  %.2f\n\r",a,x,y);

Du wirst sehen, er beginnt die Anzeige nicht bei 0.

von Das Kleinkind (Gast)


Lesenswert?

Begrenze a auf 30, dann stimmt es.
Macht aber so keinen Sinn.

von Matthias L. (mcl024)


Lesenswert?

Super Methode um seine eigenen Vermutungen zu bestätigen. Danke "ich" 
echt cool.
Aber wie kann ich meinen "Rückspulpuffer" erhöhen? Hat nämlich zu sehr 
viel Verwirrung bei mir gesorgt.

von Aike T. (biertrinker)


Lesenswert?

Starte das Programm doch einfach mal mit einem angehängten " > test.txt"
dann sollte die Ausgabe deines Programms in test.txt landen statt in der 
Console, da kannst du dann gemütlich nachprüfen ob wirklich alles 
ausgegeben wurde.

viele Grüße

Biertrinker

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Mal ganz unabhängig davon ein paar "einfache" Verfahren, um Kreise zu 
zeichnen:

http://de.wikipedia.org/wiki/Rasterung_von_Kreisen

Je nach Umgebung ist die Berechnung/Tabellierung von sin+cos nämlich 
nicht gerade einfach...

von Sven P. (Gast)


Lesenswert?

Ist das Floating-Point-Gebummsel ordentlich dazugelinkt? Ansonsten hab 
ich irgendwo schonmal gehört, dass sin() Blödsinn liefert, ich such mal.

von Matthias L. (mcl024)


Lesenswert?

Nicht schlecht der link. Ich habe mal die Methode von Horn ausprobiert, 
richtig gut. Aber sie beschreibt nur ein achtel des Kreises wie fahre 
ich dann weiter vor?

von yalu (Gast)


Lesenswert?

> Aber sie beschreibt nur ein achtel des Kreises wie fahre ich dann
> weiter vor?

Durch Anwendung einer oder mehrerer der folgenden Modifikationen
erhältst du die Punkte auf den restlichen 7/8 des Kreises:

- x durch -x ersetzen
- y durch -y ersetzen
- x und y vertauschen

von Matthias L. (mcl024)


Lesenswert?

Super Sache geht viel schneller auf meinem S65 display. Total super. 
Besser als mit float und sin, cos funktionen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.