Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.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 - Fatal编程技术网

Javascript 根据距离和方向计算坐标

Javascript 根据距离和方向计算坐标,javascript,Javascript,以下是我的简便方案: 鉴于: 这是2D,不需要担心第三个轴 段AB,A和B都具有x和y坐标 侧面宽度,到每个角落的距离:宽度/2 方向以度为单位(0表示向上,90表示向右,180表示向下等) 如何计算拐角的x和y坐标1-4 const A={x:0,y:0}; 常数B={x:10,y:0}; 常数方向=90; 常数宽度=10; 常数半宽度=宽度/2; //尝试了我发现的以下一个,但是 //没有锁,我想有些东西是有角度的 函数getCorner(点、角度、长度){ 返回{ x:点x+数学

以下是我的简便方案:

鉴于:

  • 这是2D,不需要担心第三个轴
  • AB
    A
    B
    都具有
    x
    y
    坐标
  • 侧面
    宽度
    ,到每个角落的距离:
    宽度/2
  • 方向
    以度为单位(0表示向上,90表示向右,180表示向下等)
如何计算拐角的
x
y
坐标
1-4


const A={x:0,y:0};
常数B={x:10,y:0};
常数方向=90;
常数宽度=10;
常数半宽度=宽度/2;
//尝试了我发现的以下一个,但是
//没有锁,我想有些东西是有角度的
函数getCorner(点、角度、长度){
返回{
x:点x+数学cos(角度)*长度,
点y+数学sin(角度)*长度
};
}
//期望
//左下角:{x:0,y:5}
//右下角:{x:0,y:-5}
//左上:{x:10,y:5}
//右上:{x:10,y:-5}
console.log(
“左下:”,
getCorner(A,方向-90,半宽)
);
console.log(
“右下角:”,
getCorner(A,方向+90,半宽)
);
console.log(“--”);
console.log(
“左上:”,
getCorner(B,方向-90,半宽)
);
console.log(
“右上:”,
getCorner(B,方向+90,半宽)

);终于找到了答案,网上有这么多不同的方法,但都不管用。尝试和错误赢得了胜利


const A={x:0,y:0};
常数B={x:10,y:0};
常数方向=90;
常数宽度=10;
常数半宽度=宽度/2;
//仅更改此函数
函数getCorner(点、角度、长度){
角度=角度*(数学PI/180);
返回{
x:点x+数学sin(角度)*长度,
点y+数学cos(角度)*长度
};
}
//期望
//左下角:{x:0,y:5}
//右下角:{x:0,y:-5}
//左上:{x:10,y:5}
//右上:{x:10,y:-5}
console.log(
“左下:”,
getCorner(A,方向-90,半宽)
);
//这是JS的一个错误,因为
//“x:6.123233995736766e-16”这是
// "0.0000000000000006123233995736766"
console.log(
“右下角:”,
getCorner(A,方向+90,半宽)
);
console.log(“--”);
console.log(
“左上:”,
getCorner(B,方向-90,半宽)
);
console.log(
“右上:”,
getCorner(B,方向+90,半宽)

);指示Y轴向上,可以简单地按以下方式解决:

我们看到每个角点位于AB段周围+/-90度的角度。考虑下面的图,<代码> dx和<代码> Dy 值(从A或B到达每个角点)很容易计算:

dx = (W/2).sin(alpha)
dy = (W/2).cos(alpha)
其中
alpha
等于
90-方向
。因此,我们可以按照以下代码片段编写js代码:

const A={x:0,y:0};
常数B={x:10,y:0};
常数方向=90;
常数宽度=10;
变量长度=宽度/2;
变量角度=(90-方向)*(Math.PI/180);
var dx=数学正弦(角度)*长度;
var dy=数学cos(角度)*长度;
log(“左下:”,{x:A.x-dx,y:A.y+dy});
log(“右下:”,{x:A.x+dx,y:A.y-dy});
console.log(“--”);
log(“左上:”,{x:B.x-dx,y:B.y+dy});

log(“右上:”,{x:B.x+dx,y:B.y-dy})长度是2*宽度吗?图表看起来不符合比例。@zer00ne
AB
段的长度?或
getCorner
中的长度属性?我给它起的名字不好,应该是
halfWidth
。是的,我没有注意到AB在那里…@zer00ne是的,我只有
width
AB
段和段的方向(从A到B)。不清楚输入是什么?如果我们有A和B的(x,y)和距离宽度,那么方向也会决定不放弃的动力,它比我的效率高很多。但是我确实发现了一个小错误:
右上方
应该是
{x:B.x+dx,y:B.y-dy}
。如果
方向
接近90,则当前的实现有效,否则将崩溃。欢迎您!是的,这是一个简单的错误,从图中可以很容易地看出正确的数学公式。底部和顶部的公式模式是相同的(x-dx,y+dy和x+dx,y-dy)。我编辑了这个来纠正它,你现在可以把它标记为接受答案;D