【发布时间】:2017-10-03 15:35:23
【问题描述】:
所以我正在研究一个简单的函数,在该函数中,您提供一个点和一个角度以及圆的半径,线相交,然后您返回一个交点。由于一些非常未知的原因,我没有得到预期的 x 位置? 我对 x 位置的计算基于:http://mathworld.wolfram.com/Circle-LineIntersection.html
根据 Desmos 的说法,如果你们中的任何人都能做到这一点,我会非常满意,但要让你的函数吐出在这种情况下预期的 x 位置,一种解决方案为 -27.386,另一种解决方案为 27.386图形计算器。
该点为 (-70, -40.415),角度为 PI/6,圆半径为 sqrt(1000)。使用此信息,您应该能够获得两个 x 解决方案。
我的代码:
function sgn(x) {
return x < 0 ? -1 : 1;
}
function findPointOfCollision(p, t, r) { // p -> point, t -> theta, r -> radius
p2 = [p[0] + 200*Math.cos(t), p[1] + 200*Math.sin(t)]; // Another point in the line given by point and angle
let x1 = p[0];
let y1 = p[1];
let x2 = p2[0];
let y2 = p2[1];
let dx = x2 - x1;
let dy = y2 - y1;
let dr = Math.sqrt(dx*dx + dy*dy);
let D = x1*y2 - x2*y1;
let x = (D*dy + sgn(dy)*dx*Math.sqrt(r*r*dr*dr - D*D))/dr*dr;
return [x]; // Only need the x position for the collision point atm
}
function start () {
console.log(findPointOfCollision([-70, -40.415], Math.PI/6, 31.6227766017));
}
【问题讨论】:
-
圆的中心在哪里?
(0,0)或p? -
.../dr*dr-- 你想要.../(dr*dr)或.../dr/dr这里。 -
@Michał 中心在 (0, 0) 是对的
-
@MOehm 我不知道如何感谢你只是帮助我意识到我知道的一些事情,但没有看到让我整整一周的沮丧......我很尴尬!谢谢!
-
这些小东西你可以盯着看很久,直到第一个出现的人立即看到。
:)同时我已经写了一个正确的答案,所以如果你想感谢我,你可以接受。
标签: algorithm line collision geometry intersection