Autor Beitrag
Clive
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 25.11.09 20:41 
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?


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
                    g.DrawLine(pen, (((float)panel1.Width / 10) * i), panel1.Height, (((float)panel1.Width / 10) * i), 0);					
Clive Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 26.11.09 08:35 
Herzlichen dank für die Antwort!
So ich habe das mal probiert aber sie selbst:


i46.tinypic.com/23h86qx.png

Sind alle nicht gleich!

Moderiert von user profile iconChristian S.: Img-Tags entfernt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 26.11.09 18:04 
Herzlichen Dank für die schnelle Antwort!
So hast du das gemeint oder?

ausblenden 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));
                    }
                }



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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 26.11.09 19:50 
ausblenden C#-Quelltext
1:
(float)panel1.Width / 10					

ist richtig,
ausblenden C#-Quelltext
1:
(float)(panel1.Height / 10)					

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

_________________
>λ=
Clive Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 26.11.09 20:14 
Herzlichen Dank..hat geklappt!