请使用C#语言写一个功能。在像素点图像中,已知两个点A和B的坐标。返回AB之间连线上,所有坐标为整数的点。
时间: 2024-02-23 14:01:58 浏览: 48
两个图形间的连接线(C#)
4星 · 用户满意度95%
以下是使用C#语言实现的代码:
```csharp
using System;
using System.Collections.Generic;
namespace IntegerPointsOnLine
{
class Program
{
static void Main(string[] args)
{
int[] pointA = { 2, 3 };
int[] pointB = { 6, 10 };
List<int[]> integerPoints = GetIntegerPointsOnLine(pointA, pointB);
Console.WriteLine("Integer points on line between A({0},{1}) and B({2},{3}):", pointA[0], pointA[1], pointB[0], pointB[1]);
foreach (int[] point in integerPoints)
{
Console.WriteLine("({0},{1})", point[0], point[1]);
}
Console.ReadLine();
}
static List<int[]> GetIntegerPointsOnLine(int[] pointA, int[] pointB)
{
List<int[]> integerPoints = new List<int[]>();
int x1 = pointA[0];
int y1 = pointA[1];
int x2 = pointB[0];
int y2 = pointB[1];
int dx = Math.Abs(x2 - x1);
int dy = Math.Abs(y2 - y1);
int sx = x1 < x2 ? 1 : -1;
int sy = y1 < y2 ? 1 : -1;
int err = dx - dy;
int x = x1;
int y = y1;
while (true)
{
if (IsIntegerPoint(x, y))
{
integerPoints.Add(new int[] { x, y });
}
if (x == x2 && y == y2)
{
break;
}
int e2 = 2 * err;
if (e2 > -dy)
{
err -= dy;
x += sx;
}
if (e2 < dx)
{
err += dx;
y += sy;
}
}
return integerPoints;
}
static bool IsIntegerPoint(int x, int y)
{
if (x != (int)x || y != (int)y)
{
return false;
}
return true;
}
}
}
```
该代码使用 Bresenham 算法计算两点之间的连线,并返回连线上所有坐标为整数的点。在 `Main` 方法中,我们定义两个点 A 和 B 的坐标,然后调用 `GetIntegerPointsOnLine` 方法来获取连线上所有整数坐标的点。最后,我们循环遍历这些点并输出它们的坐标。
阅读全文