Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算交点坐标_Javascript_Canvas_Intersection - Fatal编程技术网

Javascript 计算交点坐标

Javascript 计算交点坐标,javascript,canvas,intersection,Javascript,Canvas,Intersection,我有两条线,我想计算它们的交点。 看 红线坐标 P1(150,0) P2(125,(stepsY+150)/2) 蓝线坐标 Q1(150150) Q2(125,(stepsY)/2) - 我发现你必须为每条线导出线性函数,比如f(x)=m*x+n,来计算交点 - 步骤1 要获得坡度m,请执行以下操作: m=(y2-y1)/(x2-x1) 红线坡度 mP=-((stepsY+150)/50) 蓝线坡度 mQ=-((stepsY/2)-150)/25) - 步骤2 第二步是定义y相交n: 红线y相交

我有两条线,我想计算它们的交点。 看

红线坐标

P1(150,0)

P2(125,(stepsY+150)/2)

蓝线坐标

Q1(150150)

Q2(125,(stepsY)/2)

-

我发现你必须为每条线导出线性函数,比如
f(x)=m*x+n
,来计算交点

-

步骤1

要获得坡度m,请执行以下操作:

m=(y2-y1)/(x2-x1)

红线坡度

mP=-((stepsY+150)/50)

蓝线坡度

mQ=-((stepsY/2)-150)/25)

-

步骤2

第二步是定义y相交n:

红线y相交

nP=((stepsY+150)/50)*150

蓝线y相交

nQ=((stepsY/2)-150)/25)*150)-150

-

步骤3

现在我可以导出函数:

红线函数

f(x)=mP*x+nP

f(x)=(((stepsY+150)/50)*x)+((stepsY+150)/50)*150

蓝线函数

f(x)=mQ*x+nQ

f(x)=(((stepsY/2)-150)/25)*x+((stepsY/2)-150)/25)*150)-150

-

步骤4

现在我需要你的帮助! 下一步是将这两个函数相等,如
mP*x+nP=mQ*x+nQ
,但我不明白。 如果有人能帮忙,那就太好了

-

JS

var mouseX  = 0;
var mouseY  = 0;

var stepsY  = 75;
var stepsX  = 100;

var pageY = 0;
var pageX = 0;

$(window).on({
    load: resizeCanvas()
});


function resizeCanvas() {
    document.onmousemove = function(e) { 
        mouseX = e.pageX;
        mouseY = e.pageY;
    }
}


var loop = setInterval(function() {

    var canvas = document.getElementById('canvas');

    if (canvas.getContext) {

        stepsY += ( ( 125 + parseInt(-mouseY / ($(document).height() / 85 ) )) - stepsY ) / 12;
        stepsX += ( ( 125 + parseInt(-mouseX / ($(document).width() / 46 ) )) - stepsX ) / 12;

        var ctx = canvas.getContext('2d');

        if ( window.devicePixelRatio >= 2 ) {
            canvas.width = 600;
            canvas.height = 300;
            canvas.style.width = "300px";
            canvas.style.height = "150px";
            ctx.scale(2,2);
        } else {
            canvas.style.width = "300px";
            canvas.style.height = "150px";
        }

        ctx.clearRect(0, 0, window.innerWidth, window.innerHeight);

        ctx.beginPath();
        ctx.moveTo( 150, 0 );
        ctx.lineTo( 125, (stepsY+150)/2 );
        ctx.strokeStyle = "red";
        ctx.stroke();        

        ctx.beginPath();
        ctx.moveTo( 150, 150 );
        ctx.lineTo( 125, (stepsY)/2 );
        ctx.strokeStyle = "blue";
        ctx.stroke();   

    }    

}, 20);

因此,将你的方程设置为等于

mP*x + nP = mQ*x + nQ
然后解x得到

mP*x - mQ*x = nQ - nP
(mP - mQ)x = nQ - nP

x = (nQ - nP)/(mP - mQ)       
(如果(mP-mQ)=0,则直线平行且没有交点) y坐标是

y = mP * x + nP     or     y = mQ * x + nQ
这两个方程式应产生相同的y值(最大舍入误差)