给定两条线,我可以很容易地计算出交点。如果我从两个顶点开始:
(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。并且所有内容均为无符号。
在高中减去分数时,我们的老师教我们找到一个共同的分母
所以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] 删除。
我来说两句