javascript - 如何在 SVG 中计算法国曲线?
问题描述
这看起来很简单,但我无法理解它。我有两点需要使用法式曲线连接。我使用 SVG 用纯 JavaScript 制作了一个示例,所以一个解决方案会很棒,尽管我也欢迎某种基于公式的方法可以翻译成其他语言。
示例代码托管在这里:https ://jsfiddle.net/se6kf95u/
const nameSpace = 'http://www.w3.org/2000/svg';
// Setup SVG Container
var svg = document.createElementNS(nameSpace, 'svg')
svg.setAttributeNS(null, 'viewBox', '0 0 400 200')
document.body.appendChild(svg);
// Draw Example 1
const line1 = document.createElementNS(nameSpace, 'line');
line1.setAttributeNS(null, 'x1','50');
line1.setAttributeNS(null, 'y1','100');
line1.setAttributeNS(null, 'x2','100');
line1.setAttributeNS(null, 'y2','50');
line1.setAttributeNS(null, 'stroke', 'black');
svg.appendChild(line1);
// Draw Example 2
const line2 = document.createElementNS(nameSpace, 'line');
line2.setAttributeNS(null, 'x1','50');
line2.setAttributeNS(null, 'y1','150');
line2.setAttributeNS(null, 'x2','200');
line2.setAttributeNS(null, 'y2','120');
line2.setAttributeNS(null, 'stroke', 'black');
svg.appendChild(line2);
这是我想要实现的一个糟糕的动画:
重要提示:关于曲线如何上升(线上方或线下方)的决定将手动做出,这不是自动决定。在我使用的示例中,如果有意义的话,A 会低于该线,B 会高于该线。我没有任何其他输入参数或信息。起点和终点的坐标,以及曲线是否超过或低于直线。
旁注:我使用了我在网上找到的放大效果不佳的法国曲线图像,不是 100% 确定下面的示例是像素正确的,可能有点偏离。
解决方案
推荐阅读
- javascript - AngularJS在传入参数后计算单选按钮和未定义的值
- python-3.x - 使用事件解析巨大的 XML 文件
- javascript - Windows 脚本宿主可以运行 .js 文件吗
- python - 如何将特定行(基于列值)从多个 csv 文件复制到新的“主文件”?
- python - 分配前引用的局部变量“user_form”
- python - 如何将两个脚本与模型中的对象匹配
- amazon-web-services - LightGBM 在 AWS 上非常慢,但不是在本地
- javascript - 如何每次通过 Java、JavaScript 上的方法从 SQL Server 检索数据
- java - WebDriver 未检测到输入文本框,抛出 ElementNotInteractableException:元素不可交互
- node.js - 在黄瓜 js 中完成执行后,角括号参数不会在黄瓜功能文件中被替换