[英]Get coords of the intersection of the line in the plane
我有一个具有以下参数的画布: width = 400
, height = 400
并有一条线以角度Q
(度)穿过点cursor[x1,y1]
我需要获取平面中直线的所有交点并将其写入数组。 现在我使用以下等式: y - y1 = k * (x - x1)
检查所有点,我使用此代码:
var rad = Q * Math.PI / 180;
for (ctrY = 0; ctrY < 400; ctrY += 1) {
for (ctrX = 0; ctrX < 400; ctrX += 1) {
if ( (ctrY - cursor.y) ===
~~(Math.tan(rad) * (ctrX - cursor.x)) ) {
z.push([ctrX, ctrY]);
}
}
}
例如,当0 <Q <90且cursor [x1,y1] = [200,200] z.length = 0时,这是不正确的。
我哪里错了? 也许有一个更方便的算法?
PS对不起我的英语
我想像这样的算法。 (我只考虑0 <Q <90的情况)。 首先,我将要计算直线与Ox和Oy轴相交的点,考虑原点(0,0)点在左上角,并且如果我们假设负x和y值分别位于左侧和这一点的顶部。 令x2
和y2
为直线与Ox和Oy相交的值。 我们要计算这些值。 现在,我们有了一个系统,其中包含2个未知变量(x2和y2): Math.tan(rad) = (y1 -y2)/x1
和Math.tan(rad) = y1/(x1-x2)
。 我们可以通过在坐标系上画线并分析一点来推导这些方程式。 如果我们求解方程组,我们会发现类似x2 = (x1*y1 -x1 * x1 * Math.tan(rad)/(2 * y1-x1))
和y2= y1- x1 * Math.tan(rad)
(这些需要验证,我没有仔细检查我的演算)。 线性方程可由公式y = a*x + b
,在我们的情况下为a = x2
和b = y2
。 然后我们可以像这样计算点:
for (xIdx = 0; xIdx < 400; xIdx += 1) {
var ctrX = xIdx;
var ctrY = x2 * ctrX + y2 //todo: replace with the respective calculated variables x2 and y2(we could also define two functions in js) and proper rounding
z.push([ctrX, ctrY]);
}
我不确定我是否100%准确,但希望您能理解我的想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.