计算机图形学——中点画线算法
vector<pair<int, int>>midpointdrawing(int x1, int y1, int x2, int y2) {
vector < pair<int, int>> point;
double dx = x2 - x1;
double dy = y2 - y1;
int delatx = abs(dx);
int delaty = abs(dy);
int xstep = dx > 0 ? 1 : -1;
int ystep = dy > 0 ? 1 : -1;
int num = delaty > delatx ? delaty : delatx;
int err = 0;
double decision = abs(dy / dx);
int A = 0, B = 0;
A = static_cast<int>(dy) * xstep;
B = static_cast<int>(dx) * ystep;
if ((dy<=0&&dx>0)||(dy>0&&dx<=0)) {
B *= -1;
}
else {
A *= -1;
}
if (delaty >= delatx) {
err = A + 2 * B;
for (int i = 1; i < num; i++) {
if (err >= 0) {
x1 += xstep;
err += 2 * A + 2 * B;
}
else
{
err += 2 * B;
}
y1 += ystep;
point.emplace_back(x1, y1);
}
}
else
{
err = 2 * A + B;
for (int i = 1; i < num; i++) {
if (err >= 0) {
err += 2 * A;
}
else {
y1 += ystep;
err += 2 * A + 2 * B;
}
x1 += xstep;
point.emplace_back(x1, y1);
}
}
return point;
}