www.mikrocontroller.net

Forum: Compiler & IDEs Einfache Kreisberechnung


Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: joemu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

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

Gruss

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg (Gast)
Datum:

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

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Das Kleinkind (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Begrenze a auf 30, dann stimmt es.
Macht aber so keinen Sinn.

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Aike T. (biertrinker)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Autor: Matthias Laubnitz (mcl024)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias Laubnitz (mcl024)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.