【发布时间】:2019-01-19 11:20:36
【问题描述】:
我即将用画布开发一个特殊的动画。我想绕一个圆旋转一个等腰三角形。
注意:我不想旋转画布本身。我想每帧计算三角形的 3 个点。 (!).
let canvas = document.getElementById("canvas")
let ctx = canvas.getContext("2d")
let trianglePositionAngle = 0;
let triangleSizeAngle = 15;
function draw(trianglePositionAngle) {
ctx.fillStyle = "blue"
ctx.fillRect(0, 0, canvas.width, canvas.height)
let radius = 70
ctx.fillStyle = "black"
ctx.beginPath();
ctx.arc(canvas.width / 2, canvas.height / 2, radius, 0, 2 * Math.PI);
ctx.fill();
let triangle = {
x1: canvas.width / 2 + radius * Math.cos((trianglePositionAngle * Math.PI / 180)),
y1: canvas.height / 2 + radius * Math.sin((trianglePositionAngle * Math.PI / 180)),
x2: canvas.width / 2 + radius * Math.cos(((trianglePositionAngle + triangleSizeAngle) * Math.PI / 180)),
y2: canvas.height / 2 + radius * Math.sin(((trianglePositionAngle + triangleSizeAngle) * Math.PI / 180))
}
ctx.fillStyle = "red"
ctx.beginPath()
ctx.moveTo(triangle.x1, triangle.y1);
ctx.lineTo(triangle.x2, triangle.y2);
ctx.lineTo(canvas.width/2, canvas.height/2); // looking for the coordinates of this point
ctx.fill();
}
setInterval(function() {
draw(trianglePositionAngle++)
},100)
<canvas id="canvas" width="200" height="200"></canvas>
因为我知道三角形的对边长度相等,所以我只需要计算最后一点。我知道理论路径:
- 计算距离 xy1/xy2 的梯度 A
- 计算距离xy1/xy2的中心M
- 通常从 A 以一定的长度(例如 20px)从中心 M 计算
尽管如此,我在实现它时遇到了问题,希望有人能帮助我。提前致谢。
【问题讨论】:
标签: javascript html math canvas geometry