Entwickler-Ecke

C# - Die Sprache - Raster(Skalierung) in Panel1 erstellen


Clive - Mi 25.11.09 20:41
Titel: Raster(Skalierung) in Panel1 erstellen
Hallo

habe gerade ein Programm am laufen und soll einen Raster in X und Y Richtung erstellen:
Es werden Daten eingelesen von einem Motor und daher brauche ich jetzt einen Raster damit ich die Daten besser ablesen kann(so eine Art Schachbrett)


nur bei mir ist immer die erste und die letzte Spalte größer als der Rest!
Wo ist hier mein Problem?



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:
//Raster in Y-Richtung
                for (int i = 0; i < 10; i++)
                {
                    if (i == 0)
                    {
                        g.DrawLine(pen, 0, panel1.Height, 00);
                    }
                    else
                    {
                        g.DrawLine(pen, ((panel1.Width / 10)*i), panel1.Height, ((panel1.Width / 10)*i), 0);
                    }
                }

//Raster in X-Richtung
                for (int j = 0; j < 10; j++)
                {
                    if (j == 0)
                    {
                        g.DrawLine(pen, 0, panel1.Height, panel1.Width, panel1.Height);

                    }
                    else
                    {
                        g.DrawLine(pen, 0, ((panel1.Height/10)*j), panel1.Width, ((panel1.Height/10)*j));
                    }
                }


Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


jaenicke - Do 26.11.09 08:09

Hallo und :welcome: hier im Forum!

user profile iconClive hat folgendes geschrieben Zum zitierten Posting springen:
nur bei mir ist immer die erste und die letzte Spalte größer als der Rest!
Die erste wüsste ich jetzt nicht warum, hast du das einmal am Bildschirm ausgemessen? :gruebel:

Bei der letzten ist es klar. Denn du rechnest mit ganzen Zahlen, dementsprechend wird bei der Division bereits gerundet. Und dadurch kommt eine Ungenauigkeit ins Spiel, die dann dazu führt, dass am Ende die letzte Spalte um eben diesen Nachkommaanteil größer oder kleiner ist.

Wenn du explizit mit Gleitkommazahlen statt Ganzzahlen rechnest, dann sollte es auch klappen:

C#-Quelltext
1:
                    g.DrawLine(pen, (((float)panel1.Width / 10) * i), panel1.Height, (((float)panel1.Width / 10) * i), 0);                    


Clive - Do 26.11.09 08:35

Herzlichen dank für die Antwort!
So ich habe das mal probiert aber sie selbst:


http://i46.tinypic.com/23h86qx.png

Sind alle nicht gleich!

Moderiert von user profile iconChristian S.: Img-Tags entfernt


jaenicke - Do 26.11.09 08:41

Sieht so aus als hättest du vertikal (also im zweiten Teil, wo du X-Richtung geschrieben hast) das (float) noch nicht ergänzt. Und deshalb ist die untere Zeile noch größer.


Clive - Do 26.11.09 18:04

Herzlichen Dank für die schnelle Antwort!
So hast du das gemeint oder?


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:
//Raster in Y-Richtung
                for (int i = 0; i < 10; i++)
                {
                    if (i == 0)
                    {
                        g.DrawLine(pen, 0, panel1.Height, 00);
                    }
                    else
                    {
                        g.DrawLine(pen, (((float)panel1.Width / 10) * i), panel1.Height, (((float)panel1.Width / 10) * i), 0);
                    }
                }

                //Raster in X-Richtung
                for (int j = 0; j < 10; j++)
                {
                    if (j == 0)
                    {
                        g.DrawLine(pen, 0, panel1.Height, panel1.Width, panel1.Height);

                    }
                    else
                    {
                        g.DrawLine(pen, 0, ((float)(panel1.Height / 10) * j), panel1.Width, ((float)(panel1.Height / 10) * j));
                    }
                }



http://i47.tinypic.com/qzjfv6.png

was mache ich falsch?

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
Moderiert von user profile iconChristian S.: Img-Tags entfernt


Kha - Do 26.11.09 19:50


C#-Quelltext
1:
(float)panel1.Width / 10                    

ist richtig,

C#-Quelltext
1:
(float)(panel1.Height / 10)                    

nicht. Die Konvertierung sollte schon vor der Division geschehen ;) .


Clive - Do 26.11.09 20:14

Herzlichen Dank..hat geklappt!