gpt4 book ai didi

javascript - 在两点之间创建 svg 弧

转载 作者:行者123 更新时间:2023-12-03 02:30:19 30 4
gpt4 key购买 nike

我想使用圆弧连接两个 SVG 点(例如两个圆的中心)。如果只有一个连接,则线 ( <path> ) 将是一条直线。如果有两个连接,则两者都将是圆形的并且是对称的,这样:

所以,事实上,有一些规则:

  1. 一切都应该与连接两点的假想线对称。
  2. 从1可知,如果连接数为:

    • 奇怪:我们不显示直线
    • 偶数:我们显示直线
  3. 应该有一个值 k它定义了相同点之间的两个连接之间的距离。

  4. 穿过椭圆弧中间的切线应与连接两点的直线平行。显然,线的中间将垂直于切线。

我正在努力寻找一个公式来计算 A <path>中的参数元素。

到目前为止我所做的是:

<path d="M100 100, A50,20 0 1,0 300,100" stroke="black" fill="transparent"/>
  • M100 100很明显:这是起点(移动到 100,100)
  • 最后两个数字也很清楚。路径以 300,100 结尾
  • 我还看到,如果我输入 0而不是20 ,我得到一条直线。
  • 如果我替换1,01,1 ,路径翻转。

我不知道如何计算A参数。我读过the docs ,但我仍然不清楚想象。如何计算这些值?

svg {
width: 100%;
height: 100%;
position: absolute;
}
<!DOCTYPE html>
<html>

<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>

<body>
<?xml version="1.0" standalone="no" ?>

<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<!-- Connect A(100,100) with B(300, 100) -->
<path d="M100 100, A50,0 0 1,0 300,100" stroke="black" fill="transparent" />
<path d="M100 100, A50,20 0 1,0 300,100" stroke="black" fill="transparent" />
<path d="M100 100, A50,20 0 1,1 300,100" stroke="black" fill="transparent" />
<path d="M100 100, A50,30 0 1,0 300,100" stroke="black" fill="transparent" />
<path d="M100 100, A50,30 0 1,1 300,100" stroke="black" fill="transparent" />

<!-- A(100, 100) B(300, 400) -->
<path d="M100 100, A50,0 57 1,0 300,400" stroke="black" fill="transparent" />
<path d="M100 100, A50,20 57 1,0 300,400" stroke="black" fill="transparent" />
<path d="M100 100, A50,20 57 1,1 300,400" stroke="black" fill="transparent" />
</svg>
</body>

</html>

我使用 SVG.js 来创建路径。

最佳答案

由于需要圆弧,您的生活变得非常困难。

如果您使用二次曲线,那么几何形状就会变得非常简单 - 只需将中心 X 坐标偏移 Y 坐标差值的一半,反之亦然。

function arc_links(dwg,x1,y1,x2,y2,n,k) {
var cx = (x1+x2)/2;
var cy = (y1+y2)/2;
var dx = (x2-x1)/2;
var dy = (y2-y1)/2;
var i;
for (i=0; i<n; i++) {
if (i==(n-1)/2) {
dwg.line(x1,y1,x2,y2).stroke({width:1}).fill('none');
}
else {
dd = Math.sqrt(dx*dx+dy*dy);
ex = cx + dy/dd * k * (i-(n-1)/2);
ey = cy - dx/dd * k * (i-(n-1)/2);
dwg.path("M"+x1+" "+y1+"Q"+ex+" "+ey+" "+x2+" "+y2).stroke({width:1}).fill('none');
}
}
}

function create_svg() {
var draw = SVG('drawing').size(300, 300);
arc_links(draw,50,50,250,50,2,40);
arc_links(draw,250,50,250,250,3,40);
arc_links(draw,250,250,50,250,4,40);
arc_links(draw,50,250,50,50,5,40);
draw.circle(50).move(25,25).fill('#fff').stroke({width:1});
draw.circle(50).move(225,25).fill('#fff').stroke({width:1});
draw.circle(50).move(225,225).fill('#fff').stroke({width:1});
draw.circle(50).move(25,225).fill('#fff').stroke({width:1});
}

create_svg();
<script src="https://cdnjs.cloudflare.com/ajax/libs/svg.js/2.3.2/svg.min.js"></script>
<div id="drawing"></div>

关于javascript - 在两点之间创建 svg 弧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31804392/

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