アニメーション化する線を動的に生成し、線が別の線にぶつかったことを検出したいと考えています。基本的な線形代数を実装して線の方程式を取得し、x、y について解こうとしていますが、結果が不安定です。この時点で、2 本の線のみでテストしています。つまり、1 つの交点を取得する必要がありますが、2 つ取得しています。私は自分の数学が大丈夫であることを確認したいだけで、問題を他の場所で探す必要があります.
function collision(boid1, boid2) {
var x1 = boid1.initialX, y1 = boid1.initialY, x2 = boid1.x, y2 = boid1.y, x3 = boid2.initialX, y3 = boid2.initialY, x4 = boid2.x, y4 = boid2.y;
slope1 = (y1 - y2)/(x1 - x2);
slope2 = (y3 - y4)/(x3- x4);
if(slope1 != slope2){
var b1 = getB(slope1,x1,y1);
var b2 = getB(slope2,x3,y3);
if(slope2 >= 0){
u = slope1 - slope2;
}else{
u = slope1 + slope2;
}
if(b1 >= 0){
z = b2 - b1;
}else{
z = b2 + b1;
}
pointX = z / u;
pointY = (slope1*pointX)+b1;
pointYOther = (slope2*pointX)+b2;
console.log("pointx:"+pointX+" pointy:"+pointY+" othery:"+pointYOther);
context.beginPath();
context.arc(pointX, pointY, 2, 0, 2 * Math.PI, false);
context.fillStyle = 'green';
context.fill();
context.lineWidth = 1;
context.strokeStyle = '#003300';
context.stroke();
}
return false;
}
function getB(slope,x,y){
var y = y, x = x, m = slope;
a = m*x;
if(a>=0){
b = y - a;
}else{
b = y + a;
}
return b;
}
問題は、交点に対して 2 つの異なる値を取得していることです。1 つしかないはずなので、私の計算が間違っていると思い込んでしまいます。はい、x2、y2、x4、y4 はすべて動いていますが、それらには角度が設定されており、一貫した勾配がそれを裏付けています。