簡體   English   中英

獲取平面中直線的交點

[英]Get coords of the intersection of the line in the plane

我有一個具有以下參數的畫布: width = 400height = 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值分別位於左側和這一點的頂部。 x2y2為直線與Ox和Oy相交的值。 我們要計算這些值。 現在,我們有了一個系統,其中包含2個未知變量(x2和y2): Math.tan(rad) = (y1 -y2)/x1Math.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 = x2b = 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%准確,但希望您能理解我的想法。

似乎您需要線柵格化算法。 考慮布雷森漢姆算法

在此處輸入圖片說明

您也可以看一下DDA算法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM