gpt4 book ai didi

path - svg 在路径上放置形状

转载 作者:行者123 更新时间:2023-12-04 17:00:15 24 4
gpt4 key购买 nike

我正在用 SVG 创建一个游戏,需要沿着一条名为道路的路径放置方 block 。
路径可以弯曲或以一定角度放置,我想相对于路径旋转方形瓷砖。

我当前的结构如下所示:


<defs>
<rect id="tile" width="200" height="200" stroke-width="5" stroke="red"/>
</defs>

<g style="stroke-width=10px; stroke:#23238E;>
<path id="road1" d="M100 100 L 500 100"/>
<path id="road2" d="M500 100 L 200 100"/>
</g>

我目前对 SVG 的理解告诉我,我必须通过插值来计算图 block 的位置,但是我可以以自动方式相对于路径旋转图 block 吗?

那么我该如何申请 <use x="xx" y="yy" orient=" 汽车 " xlink:href="tile"/>



道路是根据以下信息生成的:

id = #
vector2D = {
x1 = #
y1 = #
x2 = #
y2 = #
}
tiles = # // number of tiles in road

最佳答案

拉斐尔 http://raphaeljs.com通过 path.getPointAtLenght(x) 提供路径在任意点的角度。 SVG 有一个本地实现,但它不提供角度。您可以查看 Raphael 的来源以了解发生了什么。这是相关的位:

getLengthFactory = function (istotal, subpath) {
return function (path, length, onlystart) {
path = path2curve(path);
var x, y, p, l, sp = "", subpaths = {}, point,
len = 0;
for (var i = 0, ii = path.length; i < ii; i++) {
p = path[i];
if (p[0] == "M") {
x = +p[1];
y = +p[2];
} else {
l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
if (len + l > length) {
if (subpath && !subpaths.start) {
point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
sp += ["C" + point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];
if (onlystart) {return sp;}
subpaths.start = sp;
sp = ["M" + point.x, point.y + "C" + point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]].join();
len += l;
x = +p[5];
y = +p[6];
continue;
}
if (!istotal && !subpath) {
point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
return {x: point.x, y: point.y, alpha: point.alpha};
}
}
len += l;
x = +p[5];
y = +p[6];
}
sp += p.shift() + p;
}
subpaths.end = sp;
point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1);
point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});
return point;
};

其中point.alpha是旋转角度。

关于path - svg 在路径上放置形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12497856/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com