Bresenhamのラインアルゴリズムを使用して、ラスターグリッド内のどのポイントをプロットするかを決定して、ラインセグメントを適切に視覚的に近似することができます。
このアルゴリズムは、原点が左上にある座標空間の原点と端点によって定義された線のラスタライズをカバーします。整数座標は、ピクセルの中心にマッピングされると推定されます。特に、アルゴリズムの基本形式は円の1オクタントのみをカバーします。X座標とY座標は増加しますが、絶対値が1未満の負の勾配を持つ曲線です。他のすべてのオクタントは、基本オクタント。
擬似コードでは、この基本フォームは次のようになります。
void DrawLine(Point origin, Point endpoint, Bitmap surface) {
deltaX = endpoint.X - origin.X
deltaY = endpoint.Y - origin.Y
error = 0
// Note the below fails for completely vertical lines.
deltaError = absoluteValue(deltaY / deltaX)
Y = origin.Y
for (X from origin.X to endpoint.X) {
surface.PlotPixel(X, Y)
error = error + deltaError
if (error >= 0.5) {
++Y;
error -= 1.0
}
}
}
Rosetta CodeのWebサイトには、さまざまな言語での具体的な実装のコレクションがあります。
また、アンチエイリアスを可能にするWuのラインアルゴリズムにも興味があるかもしれません。