Featured Post

Helppo ja nopea kolmionpiirtorutiini.

Vau. Kehitys kehittynyt ja oppi opittu. public static void SolidTriangle(Point a, Point b, Point c, Color color) {             Point[] po...

Friday, December 14, 2012

Helppo ja nopea kolmionpiirtorutiini.

Vau. Kehitys kehittynyt ja oppi opittu.

public static void SolidTriangle(Point a, Point b, Point c, Color color) {
            Point[] points = { a, b, c };
            points = points.OrderBy((i => i.Y)).ToArray();
            a = points[0];
            b = points[1];
            c = points[2];
            double dabx = b.X - a.X;
            double daby = b.Y - a.Y;
            double dacx = c.X - a.X;
            double dacy = c.Y - a.Y;

            double x1 = a.X;
            double x2 = a.X;
            int y = a.Y;
            while (y != b.Y) {              
                HorizontalLine((int)Math.Round(x1),
(int)Math.Round(x2), y, color);
                x1 += dabx / daby;
                x2 += dacx / dacy;
                y++;
            }
            double dbcx = c.X - b.X;
            double dbcy = c.Y - b.Y;
            x1 = b.X;
            y = b.Y;
            while (y != c.Y)
            {
                HorizontalLine((int)Math.Round(x1),
(int)Math.Round(x2), y, color);
                x1 += dbcx / dbcy;
                x2 += dacx / dacy;
                y++;
            }

  }
Samat periaatteet kuin mitä aikanaan päättelin, mutta nätimmin  tehtynä. Tämä on toimivaa c-sharppia.
Voisi testiksi vääntää saman tuonne JavaGraphicsiin, jos jaksaa.

Tätäkin voi vielä yksinkertaistaa, tarvitaan ainoastaan kolme relevanttia deltaa., ja saa kaksi jakolaskua while-looppien ulkopuolelle. Olkoonkin että fiksu kääntäjä osaa optimoida tuon automaagisesti.

No comments:

Post a Comment