使用SVG动态绘制多个圆弧

2023-12-01

我有 SVG 图像(代码如下):

SVG image

<svg height="500" width="500">
<!-- Inner line -->
<path d="M100,50 L 100,100 A 45,45 0 1,0 150,150 L 200 150" style="stroke:#000; stroke-width:6; fill:none;" />
<!-- Outer line -->
<path d="M 90,50 L 90,92.5 A 54.5,54.5 0 0,0 90,197.5 L 90, 240.5" style="stroke:#000; stroke-width:1; fill:none;" />
<circle cx="105" cy="145" r="35" stroke="black" stroke-width="1" fill="green" />

在绘制由相同边距分隔的曲线时,我看不到任何图案(我只是通过“猜测”制作了上面的图像)。行数是动态的,所以我需要一个公式来计算每一行M L A范围。例如。我可以将内线视为静态(仅显示d属性),

d="M100,50 L 100,100 A 45,45 0 1,0 150,150 L 200 150"

但首先应该以某种方式计算第一个外部,以获得d:

d="M 90,50 L 90,92.5 A 54.5,54.5 0 0,0 90,197.5 L 90, 240.5"

SVG 弧线是用A rx ry rotation large-arc-flag sweep-flag x y这里的关键参数是rx and ry:圆弧的半径和x and y这是弧线的终点。

例如,如果您有一个以 (cx, cy) 为中心、半径为 r 的圆,则可以使用以下命令在距离圆边缘 d 个单位的地方创建圆并围绕它形成圆弧:

<path d="M cx cy+r+d A r+d r+d 0 0 0 cx+r+d cy" />

该弧将位于右下象限,因为它的起点 (cx, cy+r+d) 和终点 (cx+r+d, cy)。

所以称内圆弧的半径为r和外圆弧的半径r + d。现在我们需要知道电弧在哪里开始和停止。起点和终点的 x 坐标是 cx 左侧的 d 个单位。我们可以通过毕达哥拉斯定理计算斜边为 r+d、底为 d 的三角形的高来求出 y 坐标:h = sqrt((r + d)^2 - d^2).

因此,弧线的代码将是:

d="M cx-d, 50 L cx-d, cy-h A r+d r+d 0 0 0 cx-d, cy+h L cx-d, 240"

例如,(cx, cy) = (100, 150),r = 50,d = 10

<path d="M100,50 L 100,100 A 50,50 0 1,0 150,150 L 200 150" style="stroke:#000; stroke-width:6; fill:none;" />
<path d="M 90,50 L 90,90.8 A 60,60 0 0,0 90,209.1 L 90, 240.5" style="stroke:#000; stroke-width:1; fill:none;" />
<circle cx="100" cy="150" r="40" stroke="black" stroke-width="1" fill="green" />

那有意义吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用SVG动态绘制多个圆弧 的相关文章

  • D3 将现有 SVG 字符串(或元素)追加(插入)到 DIV

    我到处寻找这个问题的答案 并找到了一些我认为可能有用的资源 但最终没有让我找到答案 这里有一些 外部SVG http bl ocks org mbostock 1014829 嵌入SVG https stackoverflow com qu
  • 在 d3.js 中操纵鼠标悬停在“点击区域”

    我想show and hideSVG 中的一个节点 当鼠标移到 mouseout 问题是我的节点内部的形状是一条宽度只有1 5px的路径 因此在鼠标悬停事件中不容易击中该区域 这对用户体验肯定不方便 我想知道是否有办法做到这一点打击范围更广
  • 让用户渲染自己的 SVG 文件的安全隐患

    我计划让网站用户上传他们自己的 SVG 文档并使用inkscape or svg2pdf 用户要么未经身份验证 要么经历一个简单的注册过程 所以我预计会有一些黑客尝试 我可以采取哪些过滤措施来最大程度地减少安全威胁 Inkscape 似乎并
  • 将整个网页设计为 SVG 文件

    免责声明 我意识到鉴于标题的荒谬 这听起来像一个巨魔 然而 这是一个真正的问题 我的背景涉及OpenGL x86 汇编 我最近开始学习网络编程 我真的很喜欢 SVG CSS 并且想知道 为什么人们不使用 SVG 设计整个网页 Context
  • 将 SVG 路径转换为绝对命令

    给定一个 SVG Path 元素 如何将所有路径命令转换为绝对坐标 例如 转换此路径
  • SVG - 可以在一侧添加笔画破折号渐变或透明形式

    我创建了一个 SVG 动画 在其中允许中风虚线阵列移动 我是否可以在中风破折号数组的尾部添加渐变并保持一侧透明 如示例中所示 svg main width 700px margin 30px auto position relative s
  • SVG SMIL animateTransform 缓动

    我正在尝试向简单的 SVG SMIL 动画添加计时功能 显然 计时 缓动可以通过以下方式设置keySplines属性 但是在我的示例中它不起作用
  • 添加鼠标事件到svg ,检测网格悬停

    我有一个有点复杂的问题 我正在尝试通过 svg 渲染网格 然后将事件侦听器添加到网格中 目前我正在通过渲染网格
  • 使 D3 响应式:viewBox 与 resize()?

    我必须构建在平板电脑 桌面显示器以及某些情况下非常大的 4k 高分辨率影院尺寸显示器上都能正常运行的 d3 可视化效果 因此 我试图找出使用 SVG 的 viewBox 属性和 preserveaspectratio 与调用调整大小函数以在
  • 高图表的分散工具提示未显示

    我有一个散点图和条形图 我无法查看酒吧上方散点的工具提示 这是小提琴http jsfiddle net tZ9Rt http jsfiddle net tZ9Rt 我正在使用这两个系列 series type scatter index 2
  • 如何进行多个 d3 窗口大小调整事件

    我有三个svg一页上的元素 每个元素都由 D3 陪伴 每个都有自己的页面调整大小逻辑 由我写的简单模块 https github com TimeMagazine d3 base让他们做出反应 问题在于 只有最后一个调整大小事件被触发 因为
  • SVG feColorMatrix 在 safari 中不起作用

    我有一个相当简单的设置 我想通过使用 svg 过滤器来改变 svg 图像的颜色
  • iText7 将 SVG 添加到 PdfDocument 中以及可能出现的问题

    关于问题的答案 如何使用 iText7 将 SVG 添加到 PDF 这是一个链接点击这里 https stackoverflow com questions 50059456 how to add an svg to a pdf using
  • 转换 SVG 过滤器

    我正在尝试创建一个像 SVG 圆圈上的阴影这样的材质设计 我希望当您单击圆圈时 这个阴影能够以良好的过渡来增长 但目前我正在努力弄清楚是否可以为这种过渡设置动画 所以我希望有人能够提供帮助 我添加了一个到目前为止所得到的小例子 一个带有阴影
  • 在 d3.js 中换行长文本

    我想将长文本元素换行为宽度 这里的例子取自博斯托克的wrap功能 http bl ocks org mbostock 7555321 但似乎有两个问题 首先 wrap的结果没有继承元素的x值 文本左移 其次它绕在同一条线上 并且lineHe
  • 在 SVG 中设置悬停语句样式

    我正在计划一个基于这个 SVG 插图的网络 菜单 我的想法的原则 一个样式为活动的圆圈 一个样式为悬停的圆圈以及一个也需要设置样式的伴随笔画 https i stack imgur com H397o png 当我阅读 SVG 文件的规范时
  • 快速响应的交互式图表/图形:SVG、Canvas 还是其他?

    我正在尝试选择正确的技术来更新一个项目 该项目基本上在可缩放 可平移的图表中渲染数千个点 当前使用 Protovis 的实现性能不佳 在这里查看 http www planethunters org classify http www pl
  • 语法错误:未知:默认情况下不支持命名空间标签

    尝试将 svg 下载为 React 组件时出现以下错误 语法错误 未知 默认情况下不支持命名空间标签 React 的 JSX 不支持命名空间标签 您可以打开 throwIfNamespace 标志来绕过此警告 import React fr
  • 悬停时的 SVG 过滤器标签

    我正在尝试通过此过滤器对 SVG 进行动画处理
  • D3.以编程方式缩放后使用鼠标滚轮时缩放会跳转

    当我通过单击鼠标缩放到特定位置然后尝试平移或使用鼠标滚轮时 缩放行为会跳跃 看来我的缩放级别正在恢复 就像单击鼠标之前一样 这是我的事件处理程序 function click d var x y k if d centered d var

随机推荐

  • 如何使可滚动元素填充父元素剩余高度的 100%?

    我有一个高度固定的容器 div 它有一些内容和另一个子元素 我希望子元素在填充剩余高度时滚动 我想出了一个似乎有效的解决方案 但我不确定它是否正确 Working fiddle 编辑 更新了小提琴以删除样式标签 有没有更好的办法 我不喜欢在
  • GetKeyboardLayout() 在某些情况下无法正常工作

    我正在编写应该指示键盘布局的控制台应用程序 我在用着GetForegroundWindow 获取当前活动窗口的函数 函数GetWindowThreadProcessId 获取线程id 最后使用函数GetKeyboardLayout 我得到键
  • 将 Java 日期转换为 UTC 字符串

    The java util Date toString 方法显示本地时区的日期 有几种常见的场景我们希望将数据打印在UTC 包括日志 数据导出以及与外部程序的通信 创建字符串表示的最佳方法是什么java util Date in UTC 如
  • 在 PHP 中将 2 个外观相似的不同种类的德语字符转换为相同的 ASCII 字符串

    我有这两个字符串 str1 O str2 e1 mb detect encoding str1 e2 mb detect encoding str2 var dump str1 var dump str2 echo e1 e1 e2 e2
  • 防止输入设备提交 angularjs 表单

    我正在开发一个应用程序 其中输入文本字段将由扫描仪扫描条形码来填充 问题是 当扫描仪扫描时 它会提交表单 它无法在扫描仪上禁用 因此我需要在表单 self 上禁用它 我在想
  • 删除 R 中给定类型的所有对象

    我该如何使用rm删除所有对象某种类型的 in R 我目前定义了一堆我想删除的函数 I know ls has a pattern选项 但这只有在我以模式命名所有函数时才会有帮助 我不是 Jilber 的答案的一个变体 rm list nam
  • 如何从 Android 活动 ping 网站并获得响应?

    我用了isReachable 但是没用 又用了ConnectivityManager和getNetworkInfo 实际上这只是为了检查我是否连接到互联网 但问题是我想检查是否可以访问互联网 所以我想 ping 一个网站以检查是否有响应 对
  • 适用于组的 Firebase 数据库规则

    我有这个 Firebase DB 如有必要可以更改 该数据库的 JSON 是 groups 1 name G1 points 1 name p1 visits 1 name v1 areas 1 name a1 waypoints 1
  • 如何阻止 Pow 服务器在计算机启动时启动 (OS X)?

    TL DR 有没有办法在我的机器启动时禁用 Pow 服务器启动 但保留通过以下方式手动启动服务器的能力powder up当我需要它运行时 我在用Pow为了我的本地发展 并通过粉末宝石 我想设置 Pow 以便服务器在启动时不会自动启动 因为运
  • delegate 在 xcode ios 项目中到底做了什么?

    我刚刚学习iPhone应用程序开发 但我很难理解委托的真正含义是什么 谁能举例说明它的作用以及它的重要性吗 感谢您的帮助 这是一个需要从概念上理解的关键概念 因此在技术细节之前了解如何思考它很重要 简单来说 委托就是一个回调 使用委托的两个
  • 调整 Google 地图标记图标图像的大小

    当我将图像加载到标记的图标属性中时 它会以其原始尺寸显示 这比应有的尺寸要大得多 我想将标准尺寸调整为较小尺寸 做这个的最好方式是什么 Code function addMyPos latitude longitude position n
  • 在 HTML 和 CSS 中更改表格中行的颜色

    尝试学习 HTML 和 CSS 我有一个简单的问题 如何为表格中的每一行指定不同的颜色 例如 第 1 行是红色 第 2 行是蓝色等 这是我的 HTML 代码 table font family Arial Helvetica sans se
  • 如何使用Python的FastFM库(因子分解机)进行推荐任务?

    我有一个数据集
  • 使用 PDO MySQL 编译 PHP 5.1.6

    我本来在 ServerFault 上问了这个问题没有得到任何回应 我认为它与编程相关 所以 这里 不久前 我们的一个大客户转向了一家托管提供商 该提供商指定了一个在所有实时服务器上保持一致的软件环境 其中包括 Apache 2 2 8 和
  • Gnu 汇编器 (GAS) 中的 CFI 指令有何用途?

    每行后面似乎都有一个 CFI 指令 并且这些指令也有很多种 例如 cfi startproc cfi endproc etc 更多这里 file temp c text globl main type main function main
  • 如何将无主键实体插入表?

    我正在使用 15 年历史的数据库 现在我们的场景是数据库优先 将实体插入主无键表 我阅读了很多 microsoft EF Core 文档 例如https learn microsoft com en us ef core modeling
  • PHP 中的 HTML 表单

    我正在用 php 脚本编写 html 表单代码 这里是 但提交网址后看起来像这样localhost codejudge submit php 但应该是这样的localhost codejudge submit php id STR 如果一个
  • Spring MVC,配置的两个实例而不是一个

    我开始学习Spring MVC 我试图摆脱所有 Spring XML 配置 这是我的 web xml
  • 我可以直接从 Swift 使用 C++ 吗?

    我想为 iOS 和 Android 本机创建一个应用程序 我过去使用过 Xamarin 现在不想再使用它了 所以我的下一个选择是用 C 编写共享代码 可以在两者上编译原生平台 现在我想知道是否可以直接从 Swift 使用 C 我发现的唯一解
  • 使用SVG动态绘制多个圆弧

    我有 SVG 图像 代码如下