仅使用整数计算两条线的交点

工作组

给定两条线,我可以很容易地计算出交点。如果我从两个顶点开始:

(x1,y1)
(x2,y2)

我可以先计算斜率(y1-y2)/(x1-x2),然后计算截距

y1 - slope * x1

然后再次执行此操作,因此我必须设置斜率和截距,然后执行以下操作:

x = (intercept2 - intercept1) / (slope1 - slope2)
y = slope1 * x + intercept1
(免责声明:这可能甚至行不通,但是我已经找到了一些非常接近的东西可以工作,并且它说明了我的一般技巧)

但是仅适用于带小数或非整数的数据类型。说顶点是:

(0,1)
(10,2)

计算斜率将导致(1-2)/(0-10),这是-1/-10这是不1/10,它是0

如何获取仅使用整数才能产生有效结果的代码?

编辑:我根本不能使用浮点数没有铸造,什么都没有。此外,值的上限为65535。并且所有内容均为无符号。

布莱恩·比宁(Brian Beuning)

在高中减去分数时,我们的老师教我们找到一个共同的分母

所以1/4-1/6 = 3/12-2/12 = 1/12

对您的斜坡也是如此。

int slope1 = n1 / d1;  // numerator / denominator
int slope2 = n2 / d2;
// All divisions below should have 0 for remainder
int g = gcd( d1, d2 ); // gcd( 4, 6 ) = 2
int d = d1 * d2 / g; // common denominator (12 above)
int n = (d/d1) * n1 - (d/d2) * n2; // (1 in 1/12 above)
// n1/d1 - n2/d2 == n/d

我希望我没错。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章