D3 弧形端部 V 形

2024-03-25

我画了一个arc https://github.com/d3/d3-shape#arcs使用 D3.js,默认情况下具有方形末端。

var arc = d3.arc()
    .innerRadius(0)
    .outerRadius(100)
    .startAngle(0)
    .endAngle(Math.PI);
d3.selectAll('svg')
    .append('path')
    .attr('d', function() {
        return arc();
    });

如何绘制一端带有 V 形形状的弧线?


我想我明白你在寻找什么,所以我会尝试一下:

正如您可能从 d3.js 文档中猜到的那样,d3.arc() 没有在一端阐明观点所需的方法。两端都应用了填充和圆角,我看不出它们如何在两端形成一个点,更不用说一个了。

我想到了两种解决方案(可能有很多我什至无法想象)

  1. 根据其结束角度,剪掉每个圆弧的末端,并附加一个三角形或其他类似的形状(或者,应用某种遮罩将末端修剪成一个点)
  2. 尝试根据您的需求重新设计 d3.arc(),接受以模块化方式开发/完善 d3 的邀请。

就我个人而言,我认为选项一可能不太干净,而且可能更难设计。选项二应该是可行的,并鼓励深入研究并制作模块:

小文件固然不错,但模块化也能让 D3 变得更有趣。微型图书馆更容易理解、开发和测试。它们使新人更容易参与并做出贡献。它们减少了“核心模块”和“插件”之间的区别,并加快了 D3 功能的开发速度。 (https://github.com/d3/d3/blob/master/CHANGES.md https://github.com/d3/d3/blob/master/CHANGES.md)

我想我应该尝试一下。


我已经进行了一次尝试,这可能是基于 d3.arc() 函数的 V 形尖弧模块的开始。

d3-shape.js 模块中 d3.arc() 函数的圆角部分可能是最佳查看位置,因为它显示了对圆弧末端的修改。如果是圆角,模块中修改圆弧的部分如下所示:

      context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
      context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
      context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);

首先处理外边缘(如上所示)。第一行是后外角的倒圆,第三行是前外角的倒圆。只需删除第三条线即可形成尖弧(如果您也将其从内边缘删除)。然后剩下的挑战是使弧的另一端变平,我通过使用起始角度和内半径和外半径来找到弧的角以创建平端来完成此操作。

最终结果是这样的:

// get tail coordinate (outer)
    var tailOuter = {};
    tailOuter.x = Math.cos(a0) * r1; // a0 = starting angle
    tailOuter.y = Math.sin(a0) * r1; // r1 = outer radius

     context.moveTo(tailOuter.x, tailOuter.y);
     context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);

我已经整理了一个快速而肮脏的module http://bl.ocks.org/andrew-reid/3375e602cc6c00c4e3ea4799d171ee27它采用 d3.arc() 函数并创建 d3.cheveronArc() 函数。它是对 d3.arc() 的彻底修改,只有四个方法(inner/outerRadius(),start/endAngle())。它无法检查可能导致不当行为的参数(例如:V 形比弧长)。这只是一个概念证明,尽管我对它看起来相当快速的尝试感到满意:

正如您可能注意到的,最内圈的尾部附近有一个奇怪的形状,小的内半径似乎会导致类似的问题。

代码可以在以下网址查看:http://bl.ocks.org/andrew-reid/3375e602cc6c00c4e3ea4799d171ee27 http://bl.ocks.org/andrew-reid/3375e602cc6c00c4e3ea4799d171ee27

看着它,我觉得我想添加一个选项,将 V 形的反面添加到弧线的后端,以获得更好的视觉效果,但这是另一个问题。

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

D3 弧形端部 V 形 的相关文章

  • javascript 中对象的“异步”循环

    通常 我们可以对数组和对象进行循环来迭代属性 值 但循环是阻塞的 但是 超时可用于模拟异步循环 我设法为数组做到了这一点 http jsfiddle net LHhy2 do stuff function asyncLoop i do st
  • pubnub 和 head.js

    有没有人成功整合过pubnub http www pubnub com 和 head js 正确吗 Pubnub http www pubnub com 希望我将他们的脚本放在页面底部并带有 div 就在它前面的标签 这可以确保在最后调用
  • 通过pm2运行node.js,但经常重新启动:通过信号[SIGINT]以代码[0]退出

    我试图在我的系统上运行 node js 但遇到了这个问题 2016 06 01 20 46 28 App app with id 13 and pid 12633 exited with code 0 via signal SIGINT 2
  • Javascript DOM setAttribute 在函数调用中不起作用

    我有一个带有输入元素的 HTML 文件 我希望向其中添加一个名为 valid fieldset011 的新属性 该属性用作 AngularJS 验证器的链接 输入元素具有属性 id fieldset011 如果我使用以下脚本 包含在脚本标签
  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • 如何导入和导出 javascript ES6 类

    我是 javascript 和 nodejs 的新手 我正在使用这个项目来发展我的技能并学习新技术 目前我的项目使用多个相互依赖的类 类文件位于不同的目录中 我当前正在尝试使用 export 和 require 语句来允许在其他文件中引用类
  • 以一定时间间隔连续重复运行 JavaScript 函数

    这是我的第一个问题 希望您尽快回答 我想要代码连续重复一个函数 我尝试了一些代码 但没有成功 我尝试了这段代码 我想在一段时间后重复这个功能 我努力了setInterval and setTimeout 但是 我还没有收到结果 这将重复该任
  • javascript jquery 使用脚本更改脚本的src

    我有一个 JavaScript 脚本 它有一个 src 元素 这个 src 是一个 url 我想使用 javascript 更改它 一次更改为其他内容 或者动态创建它 使用 javascript jquery 动态创建脚本元素的最佳方法是什
  • 确定元素是在页面折叠上方还是下方

    我有一些页面有多个输入框 用户可以在其中输入文本 在单击 下一步 按钮之前 需要填写其中一些内容 我弹出验证错误供用户查看 但是如果问题不在页面上 我希望页面滚动到它 而不是他们必须搜索丢失 错误的字段 我有一个滚动到位 但我无法确定要滚动
  • 如何以编程方式退出或关闭 Javascript UWP 应用程序? (Windows 10)

    我制作了一个游戏 它需要自己的退出按钮 我无法使用CoreApplication Exit https msdn microsoft com en us library windows apps windows applicationmod
  • 使用 JavaScript 生成 PDF 文件

    我正在尝试将 XML 数据从网页转换为 PDF 文件 并且希望能够完全在 JavaScript 中完成此操作 我需要能够绘制文本 图像和简单的形状 我希望能够完全在浏览器中完成此操作 我刚刚写了一个名为jsPDF https github
  • 有没有办法将变量从 javascript 导入到 sass 或反之亦然?

    我正在制作一个依赖于块概念的 CSS 网格系统 所以我有一个基本文件 例如 max columns 4 block width 220px block height 150px block margin 10px 它被 mixin 使用 m
  • 了解 JavaScript - 资源

    使用 StackOverflow 的微型 Digit Blog 功能进行描述here https stackoverflow com about 我想发布以下我刚刚看到的 我觉得很有趣的谷歌技术谈话视频 我一直在理解 javascript
  • console.log() 显示同一对象属性的矛盾值

    我想我可能要疯了 我使用 console log 来查看对象的状态 然后在下一行对同一对象的特定属性执行 console log 并为每个属性获取不同的值 我正在使用的代码是 console log this pictures Items
  • 在 Fabric.js 中按宽度/高度在另一个画布对象内居中和缩放画布对象

    Goal 将一个对象 水平和垂直 置于另一个对象 矩形或组 的中心canvas via Fabric js或者通过Javascript保持原始对象的长宽比相同 但也不超过父对象的宽度 高度比例 父对象 矩形或组 不会居中于canvas元素
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • 元素和 svg 形状之间的白线

    大家好 我正在使用由 shapedivider 生成的 svg 整形器 您可以看到 有一条白线 我不知道为什么它在那里以及如何删除它 请你帮助我好吗 有形状分隔符的代码 custom shape divider bottom 1640714
  • 强制输入数字小数位

    我想强制
  • Internet Explorer 9 是否会因数组和对象文字末尾的额外逗号而卡住?

    现代浏览器和 Node js 等环境允许您说 a 1 b 2 或 1 2 3 这在历史上一直是 Internet Explorer 的问题 Internet Explorer 9 中修复了此问题吗 对此有两种不同的答案 一种是对象初始值设定

随机推荐

  • 如果列值为NULL,如何实现默认值?

    我想用这些条件从表中检索一些列值 如果值为 NULL 或 空字符串 则返回一些用户定义的值 如果不满足条件 则返回其值 我怎样才能弄清楚 这是我的表查询 CREATE TABLE AUCTION CAR BID bid seq bigint
  • graphviz.backend.ExecutableNotFound:无法执行 ['dot', '-Tpng'],请确保 Graphviz 可执行文件位于系统的 PATH 上

    我花了一个小时找不到这个问题的任何解决方案 所以决定最好在这里提问 唯一给出的丰富信息here https stackoverflow com questions 35064304 runtimeerror make sure the gr
  • Ctrl-c 不使用 Git Bash 停止 Tomcat

    正如标题所示 我使用 Windows 7 在 Git Bash 上运行 Tomcat 但无法使用 Ctrl c 关闭服务器 当我按下它时 光标会消失半秒钟 但除此之外什么也没有发生 编辑 在 VSCode 的集成终端中运行 git bash
  • C# 中的工程符号?

    是否有任何代码 或内置函数 允许以工程符号输出浮点数 例如 1 5e 4将显示为150 5e 3 将显示为5m 这可能需要重构 private static string ToEngineeringNotation this double
  • android 无法打开文件进行读取

    您好 我创建了我的第一个 Hello World 应用程序 并按照以下说明进行操作 发布在developer android上 但是当我连接我的索尼xperia s时 启用调试并运行我的应用程序 我在 logcat 错误中看到说 E 444
  • 如何在 CentOs 中安装 php-xml

    我正在尝试在 CentOs 6 5 上安装 php xml 我输入命令yum install php xml 我收到此错误 Loaded plugins fastestmirror Loading mirror speeds from ca
  • maven(在开发配置文件下运行)如何包含index.html中的javascript文件?

    从 2 0 版开始我就没有使用过 jhipster 目前我正在追赶版本 4 0 6 当我尝试通过 mvnw 构建初始应用程序时 默认情况下devmaven 配置文件 从命令行 应用程序 javascript 文件不会添加到 index ht
  • 引用 dll 而不复制它们 C#

    当我们创建一个新的C 项目并引用一个dll时 该dll在编译项目时会被复制到项目的输出目录中 有没有一种方法可以引用 dll 文件而不将它们复制到项目的输出目录 并让可执行文件在运行时使用它们 类似于Assemblies如果我没错的话 我尝
  • AWS CDK 将 API 网关 URL 传递到同一堆栈中的静态站点

    我正在尝试在单个堆栈中部署 S3 静态网站和 API 网关 lambda S3 静态站点中的 JavaScript 调用 lambda 来填充 HTML 列表 但它需要知道 lambda 集成的 API 网关 URL 目前 我生成一个 Re
  • 如何强制视图刷新而不从可观察对象自动触发它?

    Note 这主要是为了调试和理解 KnockoutJS 有没有办法显式请求 Knockout 从 已绑定 视图模型刷新视图 我正在寻找类似的东西 ko refreshView 我知道这不是 Knockout 的预期用途 但我仍然想知道是否有
  • android studio 使用 build.gradle 进行地址清理

    我正在尝试使用此处描述的地址清理程序 使用 clang 构建我的应用程序 https github com google sanitizers wiki AddressSanitizer https github com google sa
  • 获取HashMap值的count个数

    使用这里的代码link https stackoverflow com questions 37129625 read and find string from text file将文本文件内容加载到 GUI Map
  • 谷歌分析用户 ID 跟踪

    我通过通用分析实现了 userID 跟踪 ga set uid 我认为我应该能够在报告中看到特定用户 但似乎甚至不可能在任何类型的报告中显示不同的用户 我在分析 API 中也没有找到这个选项 我希望能够跟踪该特定用户创建的事件 是否可以在不
  • 如何重命名 git stash?

    我有一个名称不正确的藏品 我想修正这个名称 使其准确 如何重命名藏匿处 让我们假设您的存储列表如下所示 git stash list stash 0 WIP on master Add some very important feature
  • 如何使用 Astro 获取查询字符串参数

    我正在使用一种名为 Astro 的新技术 https astro build https astro build 构建一个完全静态的服务器端渲染页面 交付零 JS 我有一个带有简单文本输入表单的页面 当用户填写该表单并单击提交按钮时 它会向
  • gpus_ReturnGuiltyForHardwareRestart

    我找到了有关该错误的更多详细信息 它似乎与信息有关 gpus ReturnGuiltyForHardwareRestart google了一下 似乎关于这个bug的信息相当有限 您以前遇到过这种情况并且知道如何解决吗 我认为我有必要更新我所
  • 下载并解压内存中的 gzip 文件?

    我想使用 urllib 下载文件并在保存之前将文件解压缩到内存中 这就是我现在所拥有的 response urllib2 urlopen baseURL filename compressedFile StringIO StringIO c
  • 将会话从模板视图传递到 python 请求 api 调用

    我想使用请求库从 Django TemplateView 进行多个内部 REST API 调用 现在我也想将会话从模板视图传递到 api 调用 考虑到性能 推荐的方法是什么 现在我正在提取cookie从目前的request模板视图中的对象
  • 将 C 字节数组转换为 long long

    我的应用程序中有一个 8 字节数组 其中包含以下数据 00000133339e36a2 该数据代表一个长整型 在写入数据的平台上 在 Mac 上这将是一个长整型 其值为 1319420966562 在实际应用中 这是一组半随机的数据 因此数
  • D3 弧形端部 V 形

    我画了一个arc https github com d3 d3 shape arcs使用 D3 js 默认情况下具有方形末端 var arc d3 arc innerRadius 0 outerRadius 100 startAngle 0