int x3, int y3)
{
int INFINIT = -1;
int a12, k12, a23, k23, a31, k31, a, k;
int x_2, y_2, x_3, y_3, step, flag = 0, deltaK, k_12;
//得到三条直线方程:
// Y = (Y1 - Y2) / (X1 - X2) * (X - X1) + Y1
// Y = (Y1 - Y3) / (X1 - X3) * (X - X1) + Y1;
// Y = (Y3 - Y2) / (X3 - X2) * (X - X3) + Y3;
// 令
// A12 = (Y1 - Y2) / (X1 - X2);
// K12 = Y1 - (Y1 - Y2) / (X1 - X2) * X1 = (X1 * Y2 - X2 * Y1) / (X1 - X2);
// Y = A12 * X + K12;
//
a12 = a23 = a31 = -1;
k12 = k23 = k31 = -1;
if ((x1 - x2) != 0)
{
a12 = (y1 - y2) * 1000 / (x1 - x2);
k12 = (x1 * y2 - x2 * y1) * 1000 / (x1 - x2);
}
else return;
if ((x2 - x3) != 0)
{
a23 = (y2 - y3) * 1000 / (x2 - x3);
k23 = (x2 * y3 - x3 * y2) * 1000 / (x2 - x3);
}
else return;
if ((x3 - x1) != 0)
{
a31 = (y3 - y1) * 1000 / (x3 - x1);
k31 = (x3 * y1 - x1 * y3) * 1000 / (x3 - x1);
}
else return;
//使用(X1, Y1) 与 (X2, Y2)这条线为底边.
//平行向(X3, Y3)方向画线;
//因些只要变化K(1,2)的值就可以画出来了.
//但这里要确定出来这条线与其它两边的交点. 根据这些点来画出线段,
//这样当(X3, Y3)的值知道时就可以确定K变化的步数step.
for (int j = 0; j < 3; j++)
{
deltaK = (y3 - a12 * x3 / 1000 - k12 / 1000);
if (deltaK < 0)
{
flag = -1;
}
else if (deltaK > 0)
{
flag = 1;
}
step = deltaK * flag;
//这样可以确定的是变化后与变化后的相交的交点在另外两边上的体现是
//X'2 = (K' - K23) / (A23 - A12);
//Y'2 = (A23 * K' - A12 * K23) / (A23 - A12);
//X'3 = (K' - K31) / (A31 - A12);
//Y'3 = (A31 * K' - A12 * K31) / (A31 - A12);
k_12 = k12;
g.setColor(0);
for (int i = 0; i < step; i++)
{
x_2 = ((k_12 - k23)/ (a23 - a12));
y_2 = ((a23 * k_12 - a12 * k23) / (a23 - a12)) / 1000;
x_3 = ((k_12 - k31) / (a31 - a12));
y_3 = ((a31 * k_12 - a12 * k31) / (a31 - a12)) / 1000;
g.drawLine(x_2, y_2, x_3, y_3);
k_12 += flag * 1000;
}
a = a12;
k = k12;
a12 = a23;
k12 = k23;
a23 = a31;
k23 = k31;
a31 = a;
k31 = k;
}
}