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;Samat periaatteet kuin mitä aikanaan päättelin, mutta nätimmin tehtynä. Tämä on toimivaa c-sharppia.
x2 += dacx / dacy;
y++;
}
}
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