[英]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.