Math 如何找出{X=569,Y=71}{X=735,Y=91}之间直线上的所有点

Math 如何找出{X=569,Y=71}{X=735,Y=91}之间直线上的所有点,math,line,equation,Math,Line,Equation,我在这里求出斜率,然后得到直线方程,然后以1的步长递增x,然后求出y 但有些人认为,这些点是如何产生的似乎并不正确。我正在使用 (y-y1)=(y2-y1)/(x2-x1)(x-x1)表示直线方程。我遗漏了什么吗?我怀疑你在用整数除法计算斜率 Gabe在对Bresenham直线算法的评论中给出的链接将说明一个快速有效的纯整数解 如果可以使用浮点,请将斜率计算为浮点类型。如果直线陡峭,则可能希望以y而不是x递增。无论哪种方式,都可以使用斜率和正在步进的另一个坐标计算一个坐标作为浮点数。然后(正确地

我在这里求出斜率,然后得到直线方程,然后以1的步长递增x,然后求出y

但有些人认为,这些点是如何产生的似乎并不正确。我正在使用


(y-y1)=(y2-y1)/(x2-x1)(x-x1)表示直线方程。我遗漏了什么吗?

我怀疑你在用整数除法计算斜率

Gabe在对Bresenham直线算法的评论中给出的链接将说明一个快速有效的纯整数解


如果可以使用浮点,请将斜率计算为浮点类型。如果直线陡峭,则可能希望以y而不是x递增。无论哪种方式,都可以使用斜率和正在步进的另一个坐标计算一个坐标作为浮点数。然后(正确地)四舍五入到最接近的整数。

您需要交替递增
x
y
。请参阅,了解如何确定何时递增哪个。除了绘制直线的“数学”方法效率极低的问题之外,还有什么问题?你有“锯齿”吗?还是坐标完全偏离了?如果你还不熟悉DDA算法,这里有一个有趣的链接:这应该是一个数学问题;但是无论如何,首先你必须获得斜率(直线有多陡),然后你开始改变数值,这样你就可以得到正确的点;请注意,坡度并不总是意味着1的变化。您应该添加一些.NET/C代码来说明您已经拥有的内容,否则,这是一个“给我一个代码”问题,它不是一个真正的问题,或者更适合,因为它是纯数学。@casperOne:我不同意这是一个纯数学问题。也许它的措辞并没有达到应有的水平,但这似乎比单方面结束更值得向下投票。舍入可以用整数除法完成:
round(a/b)=(2a+b)/2b
@Adrian McCarthy:“Gabe和Paul”。巧合的是,我们两人同时引用了相同的链接:)关键问题是jclozano的评论:在整数空间中,斜率并不总是意味着1的变化。很遗憾这么说。我们放弃了这个想法。这是一种低效的做法。。