Autor Beitrag
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mi 09.11.11 02:46 
erst mal einen schönen guten abend. :)

ich schreibe meine frage hier, weil ich mir nicht sicher bin zu was sie zählt.
ich arbeite mit "Microsoft Visual C# 2010 Express".

so dann erst mal die vorgeschichte.

ich hatte vor kurzem die fixe idee mich mit der Graphics klasse und deren DrawEllipse und DrawLine befassen zu wollen.
dachte nicht das es soooo tief in die mathematik gehen würde. :wink:
für den anfang habe ich mir einen kreis mit einer linie gezeichnet wie bei einer uhr.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
int xEllipse = 10, yEllipse = 10;
int breiteEllipse = 200, tiefeEllipse = 200;
int xmitte = 110, ymitte = 110;
int xwert = 0, ywert = -90;

Graphics g;
Pen pn = new Pen(Color.White);

g = Graphics.FromHwnd(pictureBox1.Handle);
g.DrawEllipse(pn, xEllipse, yEllipse, breiteEllipse, tiefeEllipse);
g.DrawLine(pn, xmitte, ymitte, xmitte + xwert, ymitte + ywert);

als ich das hatte hab ich überlegt wie ich den zeiger nun bewegen kann.

bei der suche nach informationen und code beispielen bin ich immer wieder
über die begriffe Polar-koordinaten und kartesische-koordinaten gestolpert.
dabei wurde mir klar das ich meine objekte ja auf einem koordinatensystem einzeichne.
nach einigen stunden suche bin ich dann auf die richtigen formeln gestoßen
mit denen ich aus winkel und radius jeden beliebigen punkt im koordinatensystem
zur x und y koordinate umrechnen kann.

Polar zu kartesisch lässt sich demnach folgendermaßen umrechnen:
x = r*cosφ
y = r*sinφ

bei diesen formeln hat es mir erst mal die fragezeichen raus gehauen,
ich hatte bis dato sinus und kosinus noch nie verwendet geschweige denn Phi(φ).

bei all der sucherei und dem vielen nach lesen im netz ist mir nun auch ein verwendungs zweck eingefallen.
ich möchte mir damit eine radar anzeige für meinen roboter nach bilden.
sprich der computer empfängt daten über aktuelle kompassrichtung(winkel)
und entfernung(radius) bis zum nächsten hinderniss und zeichnet damit dann die hindernisse ein.

soweit zur vorgeschichte.

-------------------------------------------------------------------------

so dann weiter im text mit meinem problem.

ich habe probleme mit der "Math" klasse die sin und cos können sollte
sowie der konvertierung zwischen int, dubel und float.

außerdem hab ich versucht ohne sinus und kosinus aus zu kommen
muß dann aber zwei wurzeln ziehen was ich auch nicht hin bekomme ohne "Math".

ich bräuchte also einen Algorythmus der mir aus winkel und radius
die kartesischen koordinaten der x und y achse berechnet
und möglichst in c# funktioniert ohne das ich dubiose bastel klassen erstellen muß
wie es leider bei vielen code beispielen der fall ist.

ich danke schon mal allen die überhaupt soweit lesen :wink:
und hoffe das mir jemand eine lösung geben kann.
möglichst mit erklärung, das ich es fürs nächste mal selbst kann.
p.s. geht Math überhaupt in der express version von VSC#2010?

gruß avoid


Moderiert von user profile iconChristian S.: Topic aus Off Topic verschoben am Mi 09.11.2011 um 07:52
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4795
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mi 09.11.11 11:04 
Hallo avoid,

die Math-Klasse gibt es direkt im .NET-Framework: msdn.microsoft.com/d...ary/system.math.aspx

Bei dem Arbeiten mit den Winkelfunktionen (Sin, Cos, etc.) mußt du nur beachten, daß diese mit Bogenmaß arbeiten (anstatt Gradzahlen von 0 - 360).
Für die Umrechung einfach folgende Formel benutzen:
ausblenden C#-Quelltext
1:
double radial = grad * Math.PI / 180.0;					

Für diesen Beitrag haben gedankt: avoid
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mi 09.11.11 15:00 
danke das hat mir weiter geholfen.

ich hab jetzt diesen code zum ausprobieren erstellt.
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace koordinaten_rechner
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int radius = 0, winkel = 0;
            double x = 0, y = 0;

            try
            {
                radius = Convert.ToInt16(textBox1.Text);
                winkel = Convert.ToInt16(textBox2.Text);
                label8.Text = radius.ToString();
                label9.Text = winkel.ToString();
            }
            catch { }

            try
            {
                int phi = Convert.ToInt32(winkel * Math.PI / 180.0);

                x = (radius * Math.Cos(phi));
                y = (radius * Math.Sin(phi));

                label5.Text = x.ToString();
                label6.Text = y.ToString();
            }
            catch { }
        }
    }
}


hab mir in eine windows forms anwendung zwei textboxen zur eingabe von radius und winkel,
einige label zur ausgabe und einen button um die berechnung aus zu lösen, eingefügt.
und dann diesen code verwendet.

funktioniert soweit. :)
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mi 09.11.11 15:52 
ich hab mein projekt das den kreis mit zeiger zeichnet mal zusammen gepackt
um noch ein par fragen dazu zu stellen weil es sich etwas komisch verhällt.

und zwar flackert die picturebox was aber warscheinlich am ständigen neu zeichnen liegt.

dann ändert sich die position des zeiger nicht bei jedem grad ich brauch wohl irgendwo mehr komm stellen.
warscheinlich auf der x und y achse, wie bekomme ich das besser hin?

und kann ich das aktualisieren der zeichnung noch besser lösen?

---nachtrag---31.05.2012---

ich hab an meiner zuletzt geposteten version zwar bis heute nichts geändert,
habe aber raus gefunden dass man das flackern mit der "Control.DoubleBuffered-Eigenschaft" verhindern kann.
nur so zur info.
Einloggen, um Attachments anzusehen!