gpt4 book ai didi

javascript - 计算 SVG 元素内的面积

转载 作者:行者123 更新时间:2023-11-29 15:34:11 43 4
gpt4 key购买 nike

给定一个像这个鱼缸这样的 SVG,我试图计算以粉红色定义的区域的体积占“填充水平”和“空水平”之间区域的百分比。

我不能从上到下做一个简单的百分比,因为鱼缸的形状是不规则的,这至少会使计算偏差几个百分点。我需要对许多不同形状的鱼缸执行此操作,因此需要一种算法来确定每个鱼缸的体积。

有什么方法可以在 SVG 元素上使用 javascript 执行此操作,如果可以,有什么方法可以在元素区域内以百分比的形式计算出来吗?

enter image description here

更新:将示例 SVG 上传到 jsfiddle

最佳答案

首先,您需要将 SVG 路径解析为线条。因为他们都不交叉Y 轴,这减少了找到由鱼缸引起的曲线下的面积,也称为积分。

令 {x_0, x_1, ..., x_n} 为线段 X 坐标的绝对值。

表示鱼缸图的函数是分段函数:

f(x) = 
{ (x - x_0)/(x_1 - x_0) if x_0 <= x < x_1
{ (x - x_1)/(x_2 - x_1) if x_1 <= x < x_2
{ ...
{ (x - x_(n-1))/(x_n - x_(n-1)) if x_(n-1) <= x < x_(n)

然后鱼缸的体积等于 πf(x)2(由该函数形成的旋转体)的积分。

e 为空位,v 为填充位,w 为水位。

那么鱼缸被装满的部分的比例为:

(∫ew πf(x)2 dx)/(∫ev πf(x)2 dx)

如果您的鱼缸是由函数图生成的,请将该函数用作 f(x),然后计算上面给出的积分。

可以使用数值积分技术(例如辛普森规则或Newton-Cotes 方法。

关于javascript - 计算 SVG 元素内的面积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31272073/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com