【发布时间】:2021-10-16 16:54:36
【问题描述】:
使用this thread 的答案,我能够画出一个半圆(弧线):
function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;
return {
x: centerX + (radius * Math.cos(angleInRadians)),
y: centerY + (radius * Math.sin(angleInRadians))
};
}
function describeArc(x, y, radius, startAngle, endAngle) {
var start = polarToCartesian(x, y, radius, endAngle);
var end = polarToCartesian(x, y, radius, startAngle);
var largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1";
var d = [
"M", start.x, start.y,
"A", radius, radius, 0, largeArcFlag, 0, end.x, end.y
].join(" ");
console.log(d)
return d;
}
window.onload = function() {
document.getElementById("arc1").setAttribute("d", describeArc(100, 100, 50, -90, 90));
};
<svg width="1000" height="1000">
<path id="arc1" fill="red" stroke="#446688" stroke-width="2" />
</svg>
我想要实现的是能够将 SVG 绘制为与许多弧(半圆)一致的路径,并能够在它们上设置 fill。
<svg xmlns="http://www.w3.org/2000/svg">
<path d="M 50 100 A 10 10 0 0 1 100 100 M 100 100 A 10 10 0 0 1 150 100 M 150 100 A 10 10 0 0 1 200 100 M 200 100 A 10 10 0 0 1 250 100" fill="red" stroke="blue" stroke-width="3" />
</svg>
有没有更好的方法来实现更简单的路径?现在,它看起来像这样:
<svg xmlns="http://www.w3.org/2000/svg">
<path d="M 50 100 A 10 10 0 0 1 100 100 M 100 100 A 10 10 0 0 1 150 100 M 150 100 A 10 10 0 0 1 200 100 M 200 100 A 10 10 0 0 1 250 100" fill="red" stroke="blue" stroke-width="3" />
</svg>
或者当有 30 个半圆时,我是否必须生成越来越长的路径?
编辑:需要 IE9+ 支持。此外,这些元素将是可点击、可拖动和可控的。可控是指鼠标点击/移动时它们的数量和大小会发生变化。
我选择我的第一种方法是动态的很长的路径。
谢谢!
【问题讨论】:
-
不是
a1,而是afor Arc:developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths#arcs -
@Danny'365CSI'Engelman 谢谢,我应该仔细看看。我将从问题中删除它,因为它现在无关紧要。谢谢!
标签: javascript svg drawing