Đây là những gì tôi đã kết thúc. Như @Cody Grey được đề cập trong bình luận của mình, có những điểm vô hạn trên một dòng. Vì vậy, bạn cần phải xác định có bao nhiêu điểm bạn đang tìm kiếm để lấy.
My Dòng lớp:
public class Line {
public Point p1, p2;
public Line(Point p1, Point p2) {
this.p1 = p1;
this.p2 = p2;
}
public Point[] getPoints(int quantity) {
var points = new Point[quantity];
int ydiff = p2.Y - p1.Y, xdiff = p2.X - p1.X;
double slope = (double)(p2.Y - p1.Y)/(p2.X - p1.X);
double x, y;
--quantity;
for (double i = 0; i < quantity; i++) {
y = slope == 0 ? 0 : ydiff * (i/quantity);
x = slope == 0 ? xdiff * (i/quantity) : y/slope;
points[(int)i] = new Point((int)Math.Round(x) + p1.X, (int)Math.Round(y) + p1.Y);
}
points[quantity] = p2;
return points;
}
}
Cách sử dụng:
var line = new Line(new Point(10, 15), new Point(297, 316));
var points = line.getPoints(20);
Đó sẽ trả về một mảng điểm 20 điểm cách đều nhau giữa hai thiết bị đầu cuối (bao gồm). Hy vọng rằng sẽ giúp!
Nguồn
2015-12-07 20:14:07
http://en.wikipedia.org/wiki/Bresenham's_line_algorithm – Patashu
Có * nhiều điểm * vô hạn nằm giữa hai điểm bất kỳ. Bạn có muốn tất cả? –
@CodyGray một 'Điểm' chứa hai giá trị số nguyên. Ít nhất là nó thực hiện trong XNA. Liên kết của Patashu có lẽ là có liên quan. –