- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道我可以使用 moveTo()、lineTo() 方法来绘制不规则矩形,但是如果我想在矩形上创建弧线怎么办?
我的想法如下:我在两个 lineTo() 之间添加一个 arc(),并显示如下图。
function draw(){
var c = document.getElementById("Canvas");
var ctx = c.getContext("2d");
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(40,40);
ctx.lineTo(80,40);
ctx.lineTo(80,80);
ctx.arc(80,150,70,0.5*Math.PI,1.5*Math.PI,true);
ctx.lineTo(80,260);
ctx.lineTo(40,260);
ctx.lineTo(40,40);
ctx.stroke();
}
这不是我想要的结果,我想要呈现这样的图,圆弧和矩形之间没有线。
最佳答案
只需颠倒圆弧绘制顺序即可。您当前正在从 6 点钟到 12 点钟绘制它。
这里的关键点是 arc
确实包含 lineTo(startPoint.x, startPoint.y)
,因此您需要处理这个问题。
如果你想保持这个顺序,你必须在绘制圆弧之前 moveTo
6 点钟方向,并在绘制圆弧之后再次 moveTo
6 点钟方向弧线。
function draw(){
var ctx = c.getContext("2d");
var rad = 70,
w = 40,
h = 220,
x = 40,
y = 40;
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(x, y); // top left
ctx.lineTo(x + w, y); // top right
// draw a line to the end of your arc
ctx.lineTo(x + w, y + (h - (rad * 2)) / 2);
// move to the start of the arc (6 o'clock)
ctx.moveTo(x + w, y + ((h - (rad * 2)) / 2) + rad * 2);
// draw the arc
ctx.arc(x + w, y + h/2, rad, 0.5*Math.PI, 1.5*Math.PI, true);
// move again to the start of the arc (6 o'clock)
ctx.moveTo(x + w, y + ((h - (rad * 2)) / 2) + rad * 2);
ctx.lineTo(x + w, y + h); // bottom right
ctx.lineTo(x, y + h); // bottom left
ctx.lineTo(x, y); // top right again
ctx.stroke();
}
draw();
<canvas id="c" height="300"></canvas>
通过反转它,您可以避免这些 moveTo
:
function draw() {
var ctx = c.getContext("2d");
var rad = 70,
w = 40,
h = 220,
x = 40,
y = 40;
ctx.lineWidth = 1;
ctx.beginPath();
ctx.moveTo(x, y); // top left
ctx.lineTo(x + w, y); // top right
// to the start of the arc (12 o'clock)
ctx.lineTo(x + w, y + (h - (rad * 2)) / 2);
// draw the arc
ctx.arc(x + w, y + h / 2, rad, 1.5 * Math.PI, 0.5 * Math.PI, false);
ctx.lineTo(x + w, y + h); // bottom right
ctx.lineTo(x, y + h); // bottom left
ctx.lineTo(x, y); // top right again
ctx.stroke();
}
draw();
<canvas id="c" height="300"></canvas>
关于javascript - 如何在矩形上画弧线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43729391/
我正在用 Canvas 绘制一个非传统的响钟。时间由秒环、秒针、分钟环和小时环表示。我正在使用 webkit/mozRequestAnimationFrame 在适当的时间绘制。我想修改第二个环以快速
问题:我在 Canvas 上画一艘宇宙飞船。将鼠标悬停在其 x/y 上时,我在 Canvas 上绘制一条弧线,指示星舰武器 Angular 和范围(考虑星舰当前的巴林/朝向)。目前确定的 Angula
我正在使用 css 制作一个“饼形楔形”,方法是制作一个圆圈,将其剪掉一半,然后变换旋转另一个剪裁矩形,以便仅显示 25 度的弧形。这很好用;一个明确定义了六个这样的饼图的例子是 here . 然而,
我正在尝试研究 Page 65 of LDD3 中提到的 __copy_to_user() 和 __copy_from_user() 内联函数. 我可以看到 __copy_to_user() func
我是一名优秀的程序员,十分优秀!