Javascript 用二次曲线画圆
我知道我可以使用画布的Javascript 用二次曲线画圆,javascript,html,canvas,Javascript,Html,Canvas,我知道我可以使用画布的arc功能绘制圆弧,但当我增大该圆弧的大小时,它会更改其起点和终点x、y点。所以我在想,如果我们能用其他方法画出圆弧,在增加它的大小的同时保持它的起点和终点固定 编辑 下面是我正在寻找的图片。第一个图像显示一个矩形。当它的侧面被拉伸时,它变为圆形(第二幅图像)。当侧面进一步拉伸时,它会变成一个大圆圈。在所有图像中,您都可以看到圆的端点连接到矩形的角。这就是我想做的 第一张图片 第二张图片 第三张图片 或者你可以看看我想做什么 我所做的 这显示了我的工作成果。 要绘制
arc
功能绘制圆弧,但当我增大该圆弧的大小时,它会更改其起点和终点x、y点。所以我在想,如果我们能用其他方法画出圆弧,在增加它的大小的同时保持它的起点和终点固定
编辑下面是我正在寻找的图片。第一个图像显示一个矩形。当它的侧面被拉伸时,它变为圆形(第二幅图像)。当侧面进一步拉伸时,它会变成一个大圆圈。在所有图像中,您都可以看到圆的端点连接到矩形的角。这就是我想做的
第一张图片
第二张图片
第三张图片 或者你可以看看我想做什么
我所做的
这显示了我的工作成果。
要绘制矩形,只需单击并拖动鼠标 检查以下内容: 用bezierCurveTo更新答案 HTML
<label>Range :</label>
<input type="range" name="points" value="0" min="0" step="1" max="100" id="range">
<canvas id="myCanvas" width="578" height="250"></canvas>
现在x和Y是固定的。这是您的要求吗?我相信您正在寻找这样的产品:
draw(0);
$('#range').on('change', function(){
range = parseInt($(this).val());
draw(range)
})
function draw(val){
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d'),
x = 100,
y = 50,
d;
context.clearRect(0, 0, canvas.width, canvas.height);
d = Math.sqrt(Math.pow(val,2) + Math.pow(50,2));
context.beginPath();
context.lineWidth = 1;
context.arc(x,y+val,d,0,2*Math.PI);
// line color
context.strokeStyle = 'black';
context.stroke();
// Cut off the top of the circle.
context.clearRect(0, 0, canvas.width, y);
// This stuff's just to show some dots
context.fillStyle = 'red';
context.fillRect(x-1,y-1,2,2); // Middle
context.fillRect(x-52,y-2,4,4);//Target point 1
context.fillRect(x+48,y-2,4,4);// Target point 2
context.fillRect(x-2,y+d+val-2,4,4); // Point on circle
context.fillStyle = 'black';
}
这样做有两个缺点,一是你越接近圆,它就越“慢”,因为圆在隐藏的部分(滑块控制它的大小)会以指数的方式变大,而且它不适用于现在的对角线
除此之外,它的工作原理与预期一致。改变起点和终点是什么意思?你能展示一下这个问题的图片吗?“大小”是指厚度吗?@6502:我的意思是,如果我们保持起点和终点固定,并增加弧的大小,那么它看起来会更像半圆形circle@6502:就像在二次曲线中,当我们增大它的大小时,端点的位置保持不变。关于这个悬赏,你说的“当前的答案没有包含足够的细节”到底是什么意思听着,如果你不解释为什么答案不够好,我们帮不了你。我知道我可以用arc函数来做这件事。我在找别的办法。
draw(0);
$('#range').on('change', function(){
range = parseInt($(this).val());
draw(range)
})
function draw(val){
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d'),
x = 100,
y = 50,
d;
context.clearRect(0, 0, canvas.width, canvas.height);
d = Math.sqrt(Math.pow(val,2) + Math.pow(50,2));
context.beginPath();
context.lineWidth = 1;
context.arc(x,y+val,d,0,2*Math.PI);
// line color
context.strokeStyle = 'black';
context.stroke();
// Cut off the top of the circle.
context.clearRect(0, 0, canvas.width, y);
// This stuff's just to show some dots
context.fillStyle = 'red';
context.fillRect(x-1,y-1,2,2); // Middle
context.fillRect(x-52,y-2,4,4);//Target point 1
context.fillRect(x+48,y-2,4,4);// Target point 2
context.fillRect(x-2,y+d+val-2,4,4); // Point on circle
context.fillStyle = 'black';
}