-4

我要用画布制作一种新的菜单。这是我第一次使用画布。所以有几件事我需要你的帮助来启动这种菜单。这是一张图片:

在此处输入图像描述

很抱歉给您带来不便。我编辑了这篇文章,唯一的问题是:

如果我们有n个流(上图中是3个流),那么平均计算每个区域的半径以绘制如上图的原理是什么?

请给我你对这种菜单的建议或想法。我会感激的。提前感谢您的考虑,您的想法!祝你有美好的一天 !

4

1 回答 1

1

上面例子中的半径肯定是白线的长度,所以你想要任何长度?

如果您想要将扇区平均分为弧长相等的 n 个子扇区,那么您需要决定中心的最大角度是多少,在上面的示例中是 90 度或 pi/2 弧度。

最终,最大角度、分段弧长、分段角度和半径都通过以下方式连接:

subsector_arc_length = 半径 * subsector_angle

subsector_angle = max_angle/n

或// subsector_arc_length = radius * max_angle/n(注意这些需要弧度)

但是,如果您的目标是将其绘制到画布上,则类似于:

var canvas = '<canvas id="canvas" width="500" height="500" style="border: 1px solid black; width: 500px; height: 500px; background: lightblue;"></canvas>'
document.body.innerHTML += canvas;
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

var max_angle = Math.PI/2; //rad - 90deg
var no_of_flows = 10; 
var radius = 200; //pixels

ctx.lineWidth = 5;
ctx.strokeStyle = '#333';
ctx.translate(250,350);
ctx.beginPath();
ctx.rotate(-Math.PI/2);
ctx.rotate(-Math.PI/2 + max_angle/2);
for (var i=0; i<no_of_flows; i++) {
    ctx.moveTo(0,0);
    ctx.lineTo(0, radius);
    ctx.stroke();
    ctx.rotate(-1*max_angle/(no_of_flows-1));
};

您的主要问题是您可能会在画布上生成更好的图像。+ 菜单的事件结构。

于 2012-09-14T08:53:40.817 回答