需要根据角度

时间:2016-09-02 22:35:57

标签: javascript trigonometry angle

所以我很难过。在此之前我并不知道三角学,而且我一直在学习,但似乎没有任何工作。

enter image description here

需要注意的一些事项:在html中,笛卡尔原点(0,0)是屏幕的左上角。 DIVS自然旋转是0deg或---->这样。

我需要找到由x指出的x,y点?标记问题。

$('#wrapper').on('click', function(e){
    mouseX = e.pageX;
    mouseY= e.pageY;

    var angle  = getAngle(mouseX,Rocket.centerX,mouseY,Rocket.centerY);
    var angleDistance = Math.sqrt((Math.pow((mouseX - (Rocket.left+Rocket.halfX)),2)) + (Math.pow((mouseY-(Rocket.top+Rocket.halfY)),2)));
    var cp2Angle = -90 +(angle*2);
    var invCP2Angle = 90+ angle;
    var cp2Distance = angleDistance*.5;
    //Red Line
    $(this).append('<div class="line" style="transform-origin:left center;width:'+(Math.round(angleDistance))+'px;top:'+(Rocket.top+Rocket.halfY)+'px;left:'+(Rocket.left+Rocket.halfX)+'px;transform:rotate('+(Math.round(angle))+'deg);"></div>');
     //Blue Line
     $(this).append('<div class="line" style="background:#0000FF;transform-origin:left center;width:'+Math.round(cp2Distance)+'px;top:'+(mouseY)+'px;left:'+(mouseX)+'px;transform:rotate('+(Math.round(cp2Angle))+'deg);"></div>');
}
function getAngle(x2,x1,y2,y1){
    var angle = Math.degrees(Math.atan2(y2-y1,x2-x1));
    return angle;
}
Math.degrees = function(radians) {
  return (radians * 180) / Math.PI;
};

所以这可能会令人困惑。基本上当我点击页面时,我使用Math.atan2()计算我的自定义原点和鼠标点之间的角度;我还使用Math.sqrt计算距离((Math.pow((x2 - x1),2))+(Math.pow((y2-y1),2)));

蓝线长度是红线长度的一半,但角度会根据红线的角度而变化。

当红线角度= 0度(平线)时,蓝线角度为-90(或直线向上,红线-45度,蓝线为-180(或平坦),并且红线-90,蓝线为-270度(或直线向下)。公式为-90 +(角度* 2)

我需要知道蓝线的另一个终点。这些线只用于调试,但需要点,因为我有一个动画,我在贝塞尔曲线上为火箭设置动画,我需要根据鼠标点击的角度更改控制点,如果有的话更好地计算没有三角法的方法,然后让我知道。

我读到角度与线的斜率相同,并使用Math.tan(弧度角)找到它。有时三角形将是一个直角三角形,例如,如果第一个角度是0度,有时它根本不会是一个三角形,而是直线向下,例如,如果它们点击-90。

我也试过极坐标,以为我不确定使用哪个角度:

var polarX = mouseX-(cp2Distance * Math.cos(Math.radians(invCP2Angle)));
var polarY = mouseY- (cp2Distance * Math.sin(Math.radians(invCP2Angle)));

2 个答案:

答案 0 :(得分:2)

我不太了解javascript,所以我不会给你代码,而是给你公式。在下图中,我给出了使用的约定。

enter image description here

x3 = x2 + cos(brownAngle + greenAngle) * d2
y3 = y2 + sin(brownAngle + greenAngle) * d2

如果我理解正确,您已经d2 = 0.5 * d1d1(x2, y2)以及角度。这应该只是将这些值插入上述公式中。

答案 1 :(得分:1)

ABC成为三点。

AB = ( cos(angle1), sin(angle1) ) * length1
B = A + B
BC = ( cos(angle1+angle2), sin(angle1+angle2) ) * length2
C = B + BC

在你的情况下,

A = ( 0, 0 )
angle1 = 31°
length1 = 655
angle2 = 152°
length2 = 328

然后,

C = ( Math.cos(31*Math.PI/180), Math.sin(31*Math.PI/180) ) * 655 +
    ( Math.cos(152*Math.PI/180), Math.sin(152*Math.PI/180) ) * 328
  = ( Math.cos(31*Math.PI/180) * 655 + Math.cos(183*Math.PI/180) * 328,
      Math.sin(31*Math.PI/180) * 655 + Math.sin(183*Math.PI/180) * 328 )
  = ( 233.8940945603834, 320.1837454184)