#include "Drawing.h" extern "C" { #include //For setPixel } int Min(int a, int b) { return ab?a:b; } int Max(int a, int b, int c) { return Max(Max(a,b), Max(b,c)); } void CrossProduct(int x1, int y1, int z1, int x2, int y2, int z2, int aResult[3]) { aResult[0] = (y1*z2)-(y2*z1); aResult[1] = -(x1*z2)+(x2*z1); aResult[2] = (x1*y2)-(y1*x2); } int DotProduct(int a[3], int b[3]) { return a[0]*b[0] + a[1]*b[1] + a[2]*b[2]; } bool SameSide(int p1x, int p1y, int p2x, int p2y, int x1, int y1, int x2, int y2) { int cp1[3]; int cp2[3]; CrossProduct(x2-x1, y2-y1, 0, p1x-x1, p1y-y1, 0, cp1); CrossProduct(x2-x1, y2-y1, 0, p2x-x1, p2y-y1, 0, cp2); if( DotProduct(cp1, cp2) >= 0 ) return true; return false; } bool PointInTriangle(int x, int y, int x1, int y1, int x2, int y2, int x3, int y3) { if( SameSide(x,y, x1,y1, x2,y2, x3,y3) && SameSide(x,y, x2,y2, x1,y1, x3,y3) && SameSide(x,y, x3,y3, x1,y1, x2,y2) ) return true; return false; } void DrawFilledTriangle(int x1, int y1, int x2, int y2, int x3, int y3, Color c, ScreenBuffer buffer) { int xMin = Min(x1, x2, x3), yMin = Min(y1, y2, y3); int xMax = Max(x1, x2, x3), yMax = Max(y1, y2, y3); for(int x=xMin; x