javascript - 如何在圆的两点之间画一条线
问题描述
我和我的小组(学校项目)正在尝试在一个圆圈中创建一个模乘,我们在圆圈内的线条方面取得了一些成功,但在绘制点之间的线条时我无法弄清楚我错过了什么组成圆圈。
我如何尝试画圆:
function drawCircle() {
points = [];
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
var step = 2 * Math.PI/points;
ctx.beginPath();
for(var theta=0; theta < 2*Math.PI; theta+=step)
{ var test1 = x + radius*Math.cos(theta);
var test2 = y - radius*Math.sin(theta);
ctx.lineTo(test1,test2);
}
ctx.closePath();
ctx.stroke();
整个js代码:
function draw() {
var canvas = document.getElementById('multiplier');
var ctx = canvas.getContext('2d');
var x = 300; // x coordinate
var y = 300; // y coordinate
var radius = 295; // Arc radius
var point_size = 2;
var number_of_points = 10;
var multiplier = 2;
var points = [];
function drawCircle() {
points = [];
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
var step = 2 * Math.PI/points;
ctx.beginPath();
for(var theta=0; theta < 2*Math.PI; theta+=step)
{ var test1 = x + radius*Math.cos(theta);
var test2 = y - radius*Math.sin(theta);
ctx.lineTo(test1,test2);
}
ctx.closePath();
ctx.stroke();
var i;
var angleBetweenPoints = 360 / number_of_points;
for (i = 0; i < number_of_points ; i++) {
drawPoint(i * angleBetweenPoints, 1)
}
for (i = 1; i < points.length; i++ ) {
ctx.beginPath();
ctx.moveTo(points[i].x, points[i].y);
if (i < points.length / multiplier ) {
ctx.lineTo(points[i*multiplier].x, points[i*multiplier].y);
} else {
ctx.lineTo(points[i*multiplier % points.length].x, points[i*multiplier % points.length].y);
}
ctx.stroke();
}
}
function drawPoint(angle,distance){
var pointx = x + radius * Math.cos(-angle*Math.PI/180) * distance;
var pointy = y + radius * Math.sin(-angle*Math.PI/180) * distance;
ctx.beginPath();
ctx.arc(pointx, pointy, point_size, 0, 2 * Math.PI);
ctx.fill();
points.push({x: pointx, y: pointy});
}
if (canvas.getContext) {
drawCircle();
}
// add event listener to point number selection
var pointNumElement = document.getElementById("pointNumber");
pointNumElement.addEventListener('input', function(e){
number_of_points = this.value;
drawCircle();
});
// add event listener to multiplier number selection
var pointNumElement = document.getElementById("multiplierInput");
pointNumElement.addEventListener('input', function(e){
multiplier = this.value;
drawCircle();
});
}
解决方案
推荐阅读
- python - 如何将 conda 包添加到 docker compose celery?
- discord.py - 是否可以在代码中更改 discord.py 机器人名称的颜色?
- owl - OWL 不相交的元素集
- web - 是否有分析服务可以为应用程序中的不同用户提供分析和统计信息?
- python - kivymd:AttributeError:“超级”对象没有属性“__getattr__”
- php - PHP Cookie 未分配给全局数组
- javascript - 需要将数据从产品页面获取到购物车作为滑块侧面板,并让 mysql 数据库数据显示我的字段
- r - 如何在 R 中创建参议院点名投票地图
- nginx - How can we block X-Fordward-For header IP (https request) with IPtables
- html - 需要在 html 锚点上单击两次才能转到 id 或 name