C# Sin-/Cos-Mist

Hiiims

Mitglied
Hallo,

mein Problem ist eigentlich ganz simpel (oder doch nicht?), ich versteh auch nicht warum das nicht so funktioniert, wie ich will...
Ich will zunächst einfach einen Stich zeichnen, der ähnlich einem Sekundenzeiger auf einem unsichtbaren Kreis entlangwandert oder kreist. Mit folgendem Code sollte das eigentlich gehen (zumindest nach meiner Meinung):

iAngle++;
if (iAngle > 90)
iAngle = 0;

ptRec[0].X = Convert.ToInt32(40 * Math.Cos(iAngle * 180/Math.PI) + 100);
ptRec[0].Y = Convert.ToInt32(40 * Math.Sin(iAngle * 180 / Math.PI) + 100);

Allerdings springt jetzt der Strich immer in irgendwelchen Abständen auf dem Kreis rum, und nicht in 1 Gradschritten.
Sieht jemand den Fehler oder kann mir jemand sagen was ich falsch mache?
 
Hallo,

warum benutzt du nicht einfach Graphics.RotateTransform(...) ?
C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace De.Tutorials.Training.Forms
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int currentAngleInDegrees = 0;
        int x = 200;
        int y = 200;
        int radius = 50;
        Pen redPen = new Pen(Color.Red,1.0F);
        private void timer1_Tick(object sender, EventArgs e)
        {
            Graphics g = this.CreateGraphics();

            currentAngleInDegrees = (currentAngleInDegrees + 1) % 360;
            
            g.TranslateTransform(x, y);
            g.RotateTransform(currentAngleInDegrees);
            g.DrawLine(redPen,0,0,radius, radius);
           
            g.Dispose();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }
    }
}

Ein Beispiel wie du die neue Position eines Punktes nach einer Drehung um einen Drehpunkt mit einen entsprechenden Winkel findest du hier:
http://www.tutorials.de/forum/coder...und-breite-einer-rotierten-box-berechnen.html

Gruß Tom
 
warum benutzt du nicht einfach Graphics.RotateTransform(...) ?

1. Es wäre halt für mich wichtig die Koordinaten der Punkte zu wissen...
2. Ich will das Problem jetzt nicht einfach übergehen, sondern lösen. Weil, wenn man mal wieder so etwas braucht ,weiß man immer noch nicht wie es funktioniert.

Meiner Ansicht nach stimmt auch die Formel an sich, nur vielleicht verwende ich die Falsche Sinus-/Cosinusfunktion (was eigentlich auch nicht sein kann).
Kann mit jemand sagen, was an der Rechnung falsch ist?
 
Jetzt hab ich endlich die Rätsels Lösung:

das muss so heißen:
ptRec[0].X = Convert.ToInt32(40 * Math.Cos(iAngle * Math.PI/180) + 100);
ptRec[0].Y = Convert.ToInt32(40 * Math.Sin(iAngle * Math.PI/180) + 100);

PI und 180 waren "nur" vertauscht...
 
Zurück