Algorithm/Formula创建一条线/条,该线/条遵循坐标列表中的一组规范

Algorithm/Formula to create a Line/Bar that abides a set specifications out of a list of coordinates

本文关键字:一组 列表 一条 创建 Formula Algorithm 该线 坐标      更新时间:2023-09-26

目前我遇到了一个问题,我相信其他人在我之前就已经面临并可能解决了。遗憾的是,我不知道该怎么称呼这个问题,也不知道该用哪个关键词来搜索它。到目前为止,我的研究还没有成功。

如果你能为我指明正确的方向,或者帮助我找到一个比我目前的解决方案更简单的解决方案,我将不胜感激,我个人认为这个解决方案太复杂了。

语言:Javascript对象:SVG对象

任务:

给定的是一组坐标,这些坐标象征着数据点和宽度。我的目标是在所有点上都具有给定宽度的点之间生成线。此外,我必须能够将中间的线分割到相邻的点。对于小于3或4个像素的宽度,我可以简单地使用折线来实现这一点。但是,如果宽度变大,多段线会产生越来越大的误差。

示例01-蓝色小圆点代表原始坐标

错误在于svg多段线在坐标上延伸以生成角的尖端。通过这种方式,信息的精确表示就变得错误了。我的目标是重新计算坐标,使这个角的扩展尖端正好位于给定坐标上(1像素公差)。

如果更简单的话,也可以用多边形代替直线,或者通过多个formr来构造它。

最终的结果应该看起来有点像这幅绘画技巧的杰作,但充满了,而不仅仅是一个轮廓。现在到规范:

  • 起点和终点位于直线的中间(点1和5)
  • 小于90度的角度(点2和3)表示尖端od产生的尖端(内角)
  • 大于90度的点(点4)应位于角度的平分线上

目前,我的解决方案是基于几何,从我知道的值中获得角度,然后计算新的点,但由于它已经非常复杂,我只是担心它需要很长时间才能达到我需要的准确度。

我认为像photoshop或其他矢量化工具这样的程序能够做一些类似于我的情况的事情,但由于我不知道这个问题/algorihtm是如何命名的,我还没有找到太多有用的信息。

提前感谢各位!

看看这个关于线段之间交点快速计算算法的答案。

否则,我会寻找像Raphaël或SVG.JS这样的向量库,看看它们是否有任何可以使用的东西。

最后的想法:通过您给出的例子,我怀疑您会发现Path元素是最简单的解决方案。此外,你担心天真计算的速度,但我认为,除非你要处理成千上万的点,否则当你尝试时,你会感到惊讶。