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;
}
Gast
#1051355
Hallo liegt es vielleicht daran, dass du den Schleifenindex a als float und nicht als int deklariert hast? Gruss
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
Gast
#1051376
Wird vieleicht eine Ausgabezeile verschluckt (die 0-te)?
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.
Gast
#1051390
> 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.
Gast
#1051395
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.
Gast
#1051405
Begrenze a auf 30, dann stimmt es. Macht aber so keinen Sinn.
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.
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
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...
Gast
#1051420
Ist das Floating-Point-Gebummsel ordentlich dazugelinkt? Ansonsten hab ich irgendwo schonmal gehört, dass sin() Blödsinn liefert, ich such mal.
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?
Gast
#1051498
> 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
Super Sache geht viel schneller auf meinem S65 display. Total super. Besser als mit float und sin, cos funktionen.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.