我想在下面的圖片來繪製鼠標一個扇形的矩形狀繪製一個扇形的矩形
我能夠用代碼繪製矩形下方
function Rectangle(start, end) {
var w = (end.x - start.x);
var h = (end.y - start.y);
return ["M", start.x, start.y, "L", (start.x + w), start.y, "L", start.x + w, start.y + h, "L", start.x, start.y + h, "L", start.x, start.y].join(' ');
}
var point;
document.addEventListener('mousedown', function(event) {
point = {
x: event.clientX,
y: event.clientY
}
});
document.addEventListener('mousemove', function(event) {
var target = {
x: event.clientX,
y: event.clientY
}
if(point) {
var str = Rectangle(point, target);
document.getElementById('test').setAttribute('d', str);
}
});
document.addEventListener('mouseup', function(event) {
point = null;
});
body, html {
height: 100%;
width: 100%;
margin: 0;
padding: 0
}
svg {
height:100%;
width: 100%
}
<svg>
<path id="test" style="stroke-width: 4; stroke: RGBA(212, 50, 105, 1.00); fill: none" />
</svg>
但是,當我嘗試轉換成扇形矩形我看到不同的模式完全匹配Infinite Monkey Theorm
我試過的方法是,在虛擬元素上繪製一個矩形路徑。將每個點乘以15直到總長度。然後在這些點之間繪製弧線。它不工作。另外,我想避免使用getPointAtLength
,因爲它的移動支持不是很好。
var pathEle = document.createElementNS('http://www.w3.org/2000/svg', 'path');
pathEle.setAttribute('d', rectangle(point, target));
window.pathEle = pathEle;
var points = [];
for (var i = 0; i < pathEle.getTotalLength(); i += 15) {
points.push(pathEle.getPointAtLength(i));
}
document.getElementById('test1').setAttribute('d', toSVGPath(points));
會發生什麼,如果矩形的邊的長度不是15的倍數?應該如何處理這個小的剩餘長度? –
@PaulLeBeau它不會是對稱的。附圖中的第一個框就是我想要實現的一個完美例子。角落應該成爲弧形。所以數字15是隨機抽取的,我認爲它應該是計算值 – Exception