我试图将直线上的箭头可以旋转。我有一些困难提出使用正确的公式。我知道它应该可能涉及正弦和余弦,但我已经尝试过各种配置,并且无法获得可行的结果。直线移动旋转的箭头
rotateNumber就像-1一个整数(1个左旋转),0(无旋转),1(1个右旋转)等
rotateAngle默认为10度。
下面的代码,将箭头:
if (arrowMoving) {
var rAngle = rotateAngle * rotateNumber;
var angleInRad = rAngle * (Math.PI/180);
var stepSize = 1/20;
arrowX += stepSize * Math.cos(angleInRad);
arrowY += stepSize * Math.sin(angleInRad);
DrawArrowTranslate(arrowX, arrowY);
requestAnimFrame(render);
} else {
DrawArrow();
arrowX = 0;
arrowY = 0;
}
这里的绘制和翻译的箭头,代码:
function DrawArrowTranslate(tx, ty) {
modelViewStack.push(modelViewMatrix);
/*
var s = scale4(0.3, -0.7, 1);
var t = translate(0, -4, 0);
*/
var s = scale4(0.3, -0.7, 1);
var t = translate(0, -5, 0);
var t2 = translate(0 + tx, 1 + ty, 0)
// rotate takes angle in degrees
var rAngle = rotateAngle;
var r = rotate(rAngle, 0, 0, 1);
var m = mult(t, r);
var m = mult(m, t2);
modelViewMatrix = mat4();
modelViewMatrix = mult(modelViewMatrix, m);
modelViewMatrix = mult(modelViewMatrix, s);
/*
// update bounding box
arrowBoundingBox.translate(0, -5);
arrowBoundingBox.rotate(rAngle);
arrowBoundingBox.translate(0, 1);
arrowBoundingBox.scale(0.3, -0.7);
*/
gl.uniformMatrix4fv(modelViewMatrixLoc, false, flatten(modelViewMatrix));
gl.drawArrays(gl.LINE_STRIP, 1833, 4);
gl.drawArrays(gl.LINE_STRIP, 1837, 4);
modelViewMatrix = modelViewStack.pop();
}
注意:考虑单位圆以及正向角度是如何逆时针旋转的,从直接指向裂缝开始。 – Hallsville3
我已经改变它来消除rotateNumber,它仍然无法正常工作。如果完全指向左侧,它会起作用,否则它会向错误的方向移动。例如,在没有旋转的情况下,它会直接向右移动而不是直线移动。 – Suerg
在你的坐标系统中,左上角是(0,0) – Hallsville3