在节点之间绘制连接而不重叠节点的算法

2024-01-02

我在图中有一系列节点。节点由用户放置在特定位置。保证节点不重叠,并且事实上,它们之间有一个空间缓冲区。这些节点相互连接,并且每条边在特定点处连接到节点。我需要绘制节点之间的边缘,以便边缘:

  • (必填)不要与父节点重叠
  • (理想情况下)不会重叠任何节点

我不担心边缘交叉。如果有 Javascript 的实现,那就加分了。我无法使用 Javascript 之外的任何库。


一种解决方案可以使用贝塞尔曲线 http://en.wikipedia.org/wiki/B%C3%A9zier_curve:

“贝塞尔曲线由一组控制点 P0 到 Pn 定义, 其中 n 称为其阶数(n = 1 表示线性,2 表示二次,等等)。第一个和最后一个控制点始终是终点的 曲线;然而,中间控制点(如果有的话)通常会 不在曲线上."

因此基本思想是使用父节点作为中间控制点。您还可以使用边缘点作为中间控制点以避免边缘重叠。

在维基文章中你可以找到nice动画 http://en.wikipedia.org/wiki/B%C3%A9zier_curve#Constructing_B.C3.A9zier_curves解释它。

For JavaScript 实现我查看了以下库:

  • jsdraw2d http://jsdraw2d.jsfiction.com/(LGPL 许可证)不错的演示 http://jsdraw2d.jsfiction.com/demo/curvesbezier.htm并得到很好的参考。也使用它来实现HTML5 和 SVG为了性能(jsdraw2dX http://jsdraw2dx.jsfiction.com/).
  • jsbezier http://code.google.com/p/jsbezier/在谷歌代码上

但如果你用谷歌搜索“javascript贝塞尔曲线库”你可以找到更多。

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

在节点之间绘制连接而不重叠节点的算法 的相关文章

  • 如何测试 javascript 闭包内的函数

    这似乎是不可能的 也可能是 但我正在尝试更多的 TDD 但我总是在闭包方面碰壁 假设我有以下内容 function createSomething init function privateMethod param return init
  • Android 设备上的 PhoneGap 蓝牙插件

    我一直在尝试让 PhoneGap 工作的蓝牙插件 但我似乎不知道哪里出了问题 首先 我的测试设备是 Galaxy S3 GT 19305T 应用程序是使用PhoneGap CLI http docs phonegap com en 3 0
  • 尝试将布尔 C# 变量传递给 javascript 变量并将其设置为 true

    在我的 aspx 页面中 我将布尔变量 C 传递给需要布尔类型的 javascript 函数 但遇到了问题 但是 C 变量返回 True 而 javascript 不喜欢大写 myjavascript 如果我将 c 变量转换为字符串 那么我
  • Web 串行 API - 未捕获(承诺中)DOMException:无法打开串行端口/所需成员 baudRate 未定义

    下面的代码可以在我的 Xubuntu 机器上运行 但现在我在 Kubuntu 上 它不再工作了 它不会打开端口 Arduino IDE 工作正常 可以向开发板写入代码 并且我可以在 Chrome 中选择设备 Arduino Uno 但当我尝
  • 查找最接近点的多边形顶点的索引

    Heading 我需要找到最接近点的多边形的索引 所以在这种情况下 输出将是 4 和 0 这样 如果添加了红点 我就知 道将顶点放置在数组中的位置 有谁知道从哪里开始 抱歉 如果标题有误导性 我不知道如何正确表达它 In this case
  • 使用 useReducers 调度函数发送多个操作?

    使用时是否可以通过调度函数发送多个动作useReducer挂钩反应 我尝试向它传递一组操作 但这会引发未处理的运行时异常 明确地说 通常会有一个初始状态对象和一个减速器 如下所示 const initialState message1 nu
  • 我想检查 $('#td1').text() === "x" 是否?

    我想检查innerHtml是否有X或O 所以我不能再次添加任何其他东西 但它不起作用 添加检查代码后它就停止了 我在这里尝试做一个简单的XO游戏来更熟悉javascript和jquery 我也不确定是否可以用 jQuery 做到这一点
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 使用 JavaScript 使链接保持活动状态并在单击时显示悬停效果

    I am struggling to make this work I d like to make it where if O F is clicked the hover state stays active if another li
  • Meteor:应用程序无法在 0.9.1.1 版本上运行

    出现类似错误 Error TypeError undefined is not a function evaluating Template create anonymous function iron dynamic template j
  • 如何抑制窗口鼠标滚轮滚动...?

    我正在开发嵌入页面中的画布应用程序 我有它 因此您可以使用鼠标滚轮放大绘图 但不幸的是 这会滚动页面 因为它是文章的一部分 当我在 dom 元素上滚动鼠标滚轮时 是否可以阻止鼠标滚轮在窗口上滚动 附加鼠标滚轮 不是 Gecko DOMMou
  • 可以使用 jQuery 或 Javascript 将图片的特定部分用作链接吗?

    我有这个想法 将图片 而不是文本 的各个部分链接到不同的页面或网站 并且我想在不实际创建不同的照片并将它们彼此靠近的情况下完成 这样看起来就像是一张完整的图片 这里有人知道如何使用 JavaScript 的变体 例如 jQuery 或纯 J
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • 在 webpack 2.x 中使用 autoprefixer 和 postcss

    如何使用autoprefixer使用 webpack 2 x 以前 它曾经是这样的 module loaders test scss loader style css sass postcss postcss gt return autop
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • 如何仅在最后一个
  • 处给出透明六边形角度?
  • 我必须制作这样的菜单 替代文本 http shup com Shup 330421 1104422739 My Desktop png http shup com Shup 330421 1104422739 My Desktop png
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 如何获取浏览器视口中当前显示的内容

    如何获取当前正在显示长文档的哪一部分的指示 例如 如果我的 html 包含 1 000 行 1 2 3 9991000 并且用户位于显示第 500 行的中间附近 那么我想得到 500 n501 n502 或类似的内容 显然 大多数场景都会比

随机推荐

  • 如何检测 C# Windows 窗体代码在 Visual Studio 中执行?

    是否有变量或预处理器常量可以让您知道代码是在 Visual Studio 上下文中执行的 Try 调试器 IsAttached http msdn microsoft com en us library system diagnostics
  • PHP 按键和值比较两个多维数组

    我正忙于学习 PHP 正在寻找一种方法来通过键和值比较两个关联数组 然后找到两者的差异 即 如果我有一个关联数组 array size 2 x15z gt int 12 length 2 x16z gt int 3 length 1 另一个
  • fsevents 导致模块解析失败:意外字符“�”

    我在用next js我得到 Failed to compile node modules fsevents fsevents node 1 0 Module parse failed Unexpected character 1 0 You
  • 无法使用 xpath 获取 YouTube 视频的持续时间

    我想写一些东西来返回 YouTube 链接的视频持续时间 所以我发现requests and lxml并开始遵循this http docs python guide org en latest scenarios scrape guide
  • 使用 HTML 和 CSS 的可折叠列表

    我有一个使用 HTML 和 CSS 实现的可折叠列表 该列表工作正常 但我需要一些修改 每当我单击列表中的某个项目时 它就会展开 但是 当我单击同一列表中的另一项时 先前展开的元素会折叠 而单击的元素会展开 请帮助我应用可以同时展开多个列表
  • 比“while”循环更快的方法来查找 R 中的感染链

    我正在分析存储疾病模拟模型输出的数据的大型表 300 000 500 000 行 在模型中 景观中的动物会感染其他动物 例如 在下图示例中 动物a1感染景观中的每一种动物 并且感染从一个动物转移到另一个动物 形成感染 链 在下面的示例中 我
  • Java有惰性求值吗?

    我知道 Java 在这种情况下有智能 惰性评估 public boolean isTrue boolean a false boolean b true return b a b a b is not evaluated since b i
  • 我可以确定 KeyEventArg 是字母还是数字吗?

    有没有办法确定键是否是字母 数字 A Z 0 9 在里面KeyEventArgs 还是我必须自己做 我找到了一种方法e KeyCode http bytes com topic net answers 598606 c keyeventar
  • spring - @ContextConfiguration 无法在 src/test/resources 中加载配置文件

    我尝试使用以下抽象类在 src test resources 类路径中加载 spring 配置文件 RunWith SpringJUnit4ClassRunner class ContextConfiguration locations c
  • 从 Visual C++ DLL 导出非托管类?

    当使用 Visual C 2008 创建 DLL 时 我有几个选择 我可以创建一个 班级图书馆 我知道它实际上会给我一个使用 C 的 CLI 托管 扩展的 Net 库 因为我不希望这样 并且我假设我需要一个静态 LIB 文件来链接到另一个
  • 如何使用 CSS 或 HTML 将特定的 HTML 行和列加粗?

    我想将 HTML 表格的第一行和第一列 第 0 行和第 0 列 加粗 如何使用 HTML 或 CSS 来实现这一点 桌子 table border 1 tbody tr td td td translate com AND https tr
  • ASP.NET Core:如何获取远程IP地址?

    我尝试获取远程 客户端 IP 地址 var ip httpContext Features Get
  • React JS React-router-dom 导航不工作

    我尝试在登录我的 React 应用程序后重定向用户 但导航不起作用 我不知道为什么 这是我的代码 感谢您的帮助 import React Component from react import Route Navigate from rea
  • 响应式 D3 图表

    我有这张 D3 图表 几乎是开箱即用的 有没有办法让它响应并使用宽度和高度变量 innerRadius 和outerRadius 的百分比 我正在开发一个响应式网站 需要根据屏幕尺寸 浏览器尺寸进行更改 jsfiddle在这里 http j
  • 编辑Android XML文件时如何避免XServer上的Eclipse泄漏?

    当我在 Eclipse 中编辑 XML 文件 主要是 Android 布局等 时 它会导致 XServer 上的泄漏 并最终耗尽我的所有 RAM 4GB 因此我必须按 Ctrl Alt Backspace 才能继续 你知道有什么补救办法吗
  • SQL Server 2005 和临时表范围

    我已经阅读了临时表和范围的主题 我看到的所有答案似乎都没有谈到我的担忧之一 据我所知 本地临时表的范围仅在存储过程或子存储过程的生命周期内有效 然而并发方面的情况如何 即 如果我有一个存储过程创建一个临时表 该临时表是从两个不同的进程但从同
  • 如何在 Django 运行时回退到多种语言?

    我正在构建一个 Django 应用程序 它使用 Django 的翻译功能来提供多种语言的本地化 不过我也是用Django的翻译功能来翻译的某些术语进入不同的行业基于当前登录用户的设置 例如 对于在学习评估行业工作的英语用户 我想要以下行为
  • tableView reloadData 上未调用 cellForRowAtIndexPath

    我在一个视图上有一个 UITableView 它在应用程序启动时加载数据 然后当用户在框中输入文本并点击按钮时 我重新查询数据库 重新填充存储数据的原始 NSMutableArray表的数据 所有这些都运行良好 在一些日志语句中 我可以看出
  • 组的行级安全性或使行可供组访问

    我希望表中的行只能由组成员访问 我通过以下方法创建用户并将其添加到组中 CREATE USER abc LOGIN PASSWORD securedpassword1 CREATE USER xyz LOGIN PASSWORD secur
  • 在节点之间绘制连接而不重叠节点的算法

    我在图中有一系列节点 节点由用户放置在特定位置 保证节点不重叠 并且事实上 它们之间有一个空间缓冲区 这些节点相互连接 并且每条边在特定点处连接到节点 我需要绘制节点之间的边缘 以便边缘 必填 不要与父节点重叠 理想情况下 不会重叠任何节点