非轴交叉线性函数方程
equation for non-axis-crossing linear function
我想打印出一行,其点数由用户给出。我用它来检查一个点是否在线。 (我知道它可以做得更有效。别担心。)
int proportionalFactor = (x2 - x1) / (y2 - y1);
int offset = y1 - x1 * proportionalFactor;
for(int y = 0; y < 100; y++){ //going over
for(int x = 0; x < 100; x++){ //every point
if(y == proportionalFactor * x + offset){ //and checking if it's on the line
printf("X"); //if so, mark it
}else{
printf(" "); //if not, skip it
}
}
}
如您所见,我只是使用线性函数的正规方程。但在两种情况下这是行不通的。这条线要么是水平的,要么是垂直的。对于每条甚至稍微对角线它都有效。如果有帮助,以下是它在程序中的外观图片:
输入:10|10、90|90 - 工作正常
输入:10|10、10|90 - 如您所见,它是水平的,尽管它应该是垂直的
Aaa 最后但并非最不重要的输入:10|10、10|90 - 应该是垂直线
当我输入这些值时程序崩溃,所以没有图片
我的问题是,如果我可以改变我的等式中的任何东西来使这个工作正常,我解释错了等式的哪一部分?
如果一条线包含点 (x1, y1) 和 (x2, y2 ), 该直线的方程是 (y−y1) / (x−x1) = (y2−y1) / (x2−x1)。直观地,这表示从 (x1, y 1)到点(x,y)与从(x1, y1) 到 (x 2, y2).
然而,等式中的表达式在被零除时没有定义,这发生在直线垂直时,所以x1 = x2,或者当 x 是 x1。为了纠正这个问题,我们可以乘以 (x−x1) 和 (x2−x1)。这给了我们 (y−y1) • (x2−x1) = (y 2−y1) • (x−x1)。这也是有益的,因为避免除法意味着我们可以使用整数运算,如果涉及的所有变量都是整数。
因此,如果运算中没有出现整数溢出,则点(x
、y
)在(x1
、y1
)定义的直线上并且 (x2
, y2
) 当且仅当 (y-y1) * (x2-x2) == (y2-y1) * (x-x1)
.
我想打印出一行,其点数由用户给出。我用它来检查一个点是否在线。 (我知道它可以做得更有效。别担心。)
int proportionalFactor = (x2 - x1) / (y2 - y1);
int offset = y1 - x1 * proportionalFactor;
for(int y = 0; y < 100; y++){ //going over
for(int x = 0; x < 100; x++){ //every point
if(y == proportionalFactor * x + offset){ //and checking if it's on the line
printf("X"); //if so, mark it
}else{
printf(" "); //if not, skip it
}
}
}
如您所见,我只是使用线性函数的正规方程。但在两种情况下这是行不通的。这条线要么是水平的,要么是垂直的。对于每条甚至稍微对角线它都有效。如果有帮助,以下是它在程序中的外观图片:
输入:10|10、90|90 - 工作正常
输入:10|10、10|90 - 如您所见,它是水平的,尽管它应该是垂直的
Aaa 最后但并非最不重要的输入:10|10、10|90 - 应该是垂直线
当我输入这些值时程序崩溃,所以没有图片
我的问题是,如果我可以改变我的等式中的任何东西来使这个工作正常,我解释错了等式的哪一部分?
如果一条线包含点 (x1, y1) 和 (x2, y2 ), 该直线的方程是 (y−y1) / (x−x1) = (y2−y1) / (x2−x1)。直观地,这表示从 (x1, y 1)到点(x,y)与从(x1, y1) 到 (x 2, y2).
然而,等式中的表达式在被零除时没有定义,这发生在直线垂直时,所以x1 = x2,或者当 x 是 x1。为了纠正这个问题,我们可以乘以 (x−x1) 和 (x2−x1)。这给了我们 (y−y1) • (x2−x1) = (y 2−y1) • (x−x1)。这也是有益的,因为避免除法意味着我们可以使用整数运算,如果涉及的所有变量都是整数。
因此,如果运算中没有出现整数溢出,则点(x
、y
)在(x1
、y1
)定义的直线上并且 (x2
, y2
) 当且仅当 (y-y1) * (x2-x2) == (y2-y1) * (x-x1)
.