自己写的代码,以直线方程式为基础,记录一下,以备后用
int X0 = PrePoint.X();
int Y0 = PrePoint.Y();
int X1 = CurPoint.X();
int Y1 = CurPoint.Y();
int nDisX = abs(X1-X0);
int nDisY = abs(Y1-Y0);
if (nDisX >= nDisY)//如果x轴方向距离较远,则以x轴坐标计算步长
{
if (X0 == X1)
{
return;
}
double StepLength = 0;
if (X0 > X1)
{
StepLength = -0.4;
}
else
{
StepLength = 0.4;
}
double XTemp = X0+StepLength;
for( ; X0>X1?XTemp>X1:XTemp<X1;XTemp += StepLength)
{
double YTemp = 1.0*(Y1-Y0)/(X1-X0)*(XTemp-X0)+Y0;
QPoint TargetPoint(XTemp ,YTemp );//插值所得点
}
}
else //如果y轴方向距离较远,则以y轴坐标计算步长
{
double StepLength = 0;
if (Y0 > Y1)
{
StepLength = -0.4;
}
else
{
StepLength = 0.4;
}
double YTemp = Y0+StepLength;
for ( ; Y0>Y1? YTemp>Y1:YTemp<Y1; YTemp += StepLength)
{
double XTemp = 1.0*(YTemp-Y0)*(X1-X0)/(Y1-Y0)+X0;
QPoint TargetPoint(XTemp ,YTemp );//插值所得点
}
}