【问题标题】:Rotate triangle around circle (2D)围绕圆旋转三角形(2D)
【发布时间】:2021-05-04 21:38:25
【问题描述】:

我正在尝试围绕一个圆圈旋转一个三角形,三角形应该始终朝外,这意味着它应该围绕圆圈旋转,并且我猜是围绕它的中心旋转。 我找到了this 问题,这与我需要的类似,但正好相反。 我需要的另一件事是让三角形指向用户的鼠标坐标。又名三角形就像一个箭头。

【问题讨论】:

  • 您的情况需要与您链接的问题的答案中相同的“保存、翻译、旋转、绘制、恢复”过程。如果您已经这样做并且仍然遇到问题,请展示您的尝试。
  • 到目前为止我还没有尝试过任何东西,因为我不确定旋转三角形所需的数学运算......我对代码部分并没有真正的问题,但更多就像 math 部分
  • 您不需要旋转三角形。只需旋转画布,它就会为您绘制旋转的三角形。
  • 是的...这就是问题...我遇到了旋转数学问题
  • 伴侣只是... 试试。将画布旋转 30 度并绘制一个三角形。达达,它旋转了30度。不需要旋转数学。

标签: javascript math geometry html5-canvas


【解决方案1】:

我刚刚编辑了您链接的代码并将矩形替换为三角形,当然animate() 使用鼠标移动侦听器:

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var cx = 100;
var cy = 100;
var radious = 10;
var gap = 5;
var triangleHeight = 25;
var triangleBase = 10;
redraw(cx + 1, cy);

function redraw(mx, my)
{
  mox = mx-cx;
  moy = my-cy;
  rotation = Math.atan2(moy, mox);
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.beginPath();
  ctx.arc(cx, cy, radious, 0, Math.PI * 2);
  ctx.closePath();
  ctx.fill();
  ctx.save();
  ctx.translate(cx, cy);
  ctx.rotate(rotation);
  ctx.beginPath();
    ctx.moveTo(radious+gap, -triangleBase/2);
    ctx.lineTo(radious+gap, triangleBase/2);
    ctx.lineTo(radious+gap+triangleHeight, 0);
    ctx.lineTo(radious+gap, -triangleBase/2)
  ctx.stroke();
  ctx.restore();

}

canvas.addEventListener("mousemove", function (e) {
redraw(e.pageX, e.pageY);
}, false);
<canvas id="canvas"></canvas>

顺便说一句,这是我在 JS 中的第一段代码,所以,如果有什么有趣的地方,请随时纠正我的代码。

【讨论】:

  • 很容易理解的解决方案!谢谢!我不知道 atan2 函数的存在......而且我想我有点想太多了。这会很好用,谢谢!
猜你喜欢
  • 2019-03-03
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
相关资源
最近更新 更多