找回密码
 欢迎注册
楼主: 数学星空

[原创] 椭圆台曲面被斜截面截交的曲线求解

[复制链接]
 楼主| 发表于 2024-3-23 16:10:24 来自手机 | 显示全部楼层
找到一个标准的计算方法,@mathe可以看看,对比一下楼上8#网友Huxley的方案(楼上没有简化过程,不确定是否正确?)
Screenshot_2024-03-23-15-35-17-959_com.tencent.mm.jpg
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2024-3-23 16:18:22 来自手机 | 显示全部楼层
第二页

IMG_20240323_161529.jpg

IMG_20240323_161619.jpg
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-3-23 17:32:46 | 显示全部楼层
本帖最后由 Jack315 于 2024-3-23 17:36 编辑

对于可展曲面,展开的目标应该是找到三维曲面到二维平面的一个一一对应的映射关系。

假设锥面:\(f(x,y,z)=0\)为可展曲面,其顶点坐标为:\(V(0, 0, h)\) 。
考虑锥面上的一个点 \(P(x,y,z)\),将其映射到顶点位于坐标原点的极坐标 \((\rho,\theta)\) 中,则有:
\(\rho=\sqrt{x^2+y^2+(h-z)^2}\) —— 母线上线段长度不变。
\(\theta=\frac{\sqrt{x^2+y^2}}{\rho}\phi\) —— 母线上的点\((P)\)对应的圆弧弧长不变。
其中:\(\phi\) 为过 \(P\) 点和 \(z\) 轴的平面与 \(XOZ\) 平面之间的夹角。

算是先说个思路吧。不知道这个思路有没有问题,回头再画几个图看看。
用这个思路应该可以得到可展曲面的极坐标方程,但不知道有没有什么方法可以进行验证。
用机械制图软件?或者打印在纸上卷起来看看?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-3-24 15:06:13 | 显示全部楼层
数学星空 发表于 2024-3-22 11:14
网友Huxley 给出了一般的理论分析见下截图
但没有看明白,请大神@mathe,@hujunhua帮忙看看,第(5)的公式是 ...

参考:
请问椭圆锥侧面展开图有没有人研究过?
https://www.zhihu.com/question/444087120

Huxley.png

补充网友 Huxley 在上图中角度微分公式推导过程中省略的部分:
角度微分公式推导.png
由于这部分推导过程不很明确,理解的时候有点难度了。

公式推导看起来没问题。回头再来验证这个公式……

点评

关于工程应用计算,见楼下的帖子。  发表于 2024-3-24 17:54
为了便于工程软件应用,我们必须找到渐进计算表达式(不能使用积分符号,更不能使用数学软件) )  发表于 2024-3-24 17:08
用这个公式进行圆锥体和椭圆锥体曲面展开成功。积分不容易求,只能上数值积分了。  发表于 2024-3-24 16:38
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-3-24 17:47:46 | 显示全部楼层
本帖最后由 Jack315 于 2024-3-24 18:22 编辑

一般情况下,在极坐标中曲面展开后极径有比较简单的表达式,
而极角是一积分,很难求出表达式,估计只能上数值积分。
下面给出椭圆锥体的例子。Mathematica 代码计算作图。

曲面参数方程:\(r(t)=\{\lambda a\cos t,\lambda b\sin t, \lambda c\}\)
其中:\(0\le\lambda\le1,0\le t\le 2\pi\) 。
画椭圆锥体:
  1. param = {a -> 3, b -> 2, c -> 5}
  2. ParametricPlot3D[{k a Cos[t], k b Sin[t], k c} /. param, {k, 0, 1}, {t, 0, 2 \[Pi]}, AxesLabel -> {x, y, z}]
复制代码

公式:
\(r'=\dif r/\dif t=\{-\lambda a\sin t,\lambda b\sin t,0\}\)
\(r\*r=\lambda^2(a^2\cos^2t+b^2\sin^2t+c^2)\)
\(r\*r'=\lambda^2(b^2-a^2)\sin t\cos t\)
\(r'\*r'=\lambda^2(a^2\sin^2t+b^2\cos^2t)\)
极径:
\(\rho=\sqrt{r\*r}=\lambda\sqrt{a^2\cos^2t+b^2\sin^2t+c^2}\)
极角:
\(\theta=\int_0^t{\sqrt{\frac{r'\*r'}{r\*r}-(\frac{r\*r'}{r\*r})^2}}\dif t\)
\(=\int_0^t{\sqrt{\frac{a^2\cos^2t+b^2\sin^2t}{a^2\cos^2t+b^2\sin^2t+c^2}-[\frac{(b^2-a^2)\sin t\cos t}{a^2\cos^2t+b^2\sin^2t+c^2}]^2}}\dif t\)
定义被积函数:
  1. f[t_] := Sqrt[((a^2 Cos[t]^2 + b^2 Sin[t]^2)/(a^2 Cos[t]^2 + b^2 Sin[t]^2 + c^2) -
  2.      (((b^2 - a^2) Sin[t] Cos[t])/(a^2 Cos[t]^2 + b^2 Sin[t]^2 + c^2))^2)] /. param
复制代码

为了使得展开曲线(关于 y 轴)对称,极角加上一起始角度 \(\alpha\) 。
  1. \[Alpha] = (\[Pi] - NIntegrate[f[t], {t, 0, 2 \[Pi]}])/2
复制代码

生成参数 \(t\):
  1. t = Table[(2 \[Pi])/36 i, {i, 0, 36}]
复制代码

计算极角 \(\theta\):
  1. \[Theta] = Table[NIntegrate[f[x], {x, 0, t[[i]]}], {i, Length[t]}] + \[Alpha]
复制代码

计算极径 \(\rho\):
  1. \[Rho] = Sqrt[a^2 Cos[t]^2 + b^2 Sin[t]^2 + c^2] /. param // N
复制代码

画锥底椭圆展开曲线:
  1. ListPolarPlot[Table[{\[Theta][[i]], \[Rho][[i]]}, {i, Length[t]}], Joined -> True]
复制代码

椭圆锥体展开曲线.png

点评

代入theta中r'.r'表达式为a^2sin(t)^2+b^2cos(t)^2,你误写成a^2cos(t)^2+b^2sin(t)^2  发表于 2024-3-31 20:24
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-3-24 18:07:08 | 显示全部楼层
工程应用计算可以有很多种方法来解决,如:
1) 先用数学软件计算出若干个数据点,然后进行插值。
2) 如果插值计算都有困难的话,把展开曲线分成段用直线代替。
……

猜一下:工程计算应该没有实时性要求吧。

点评

工程计算就是实时计算的,只能用已知的参数值计算,计算功能很低级,所以要高精度计算需要做很多数学上的简化~  发表于 2024-3-24 19:04
你在椭圆弧上均匀取12个点,然后计算一下 展开圆弧对应点的弧长与椭圆弧长度的误差是多少?  发表于 2024-3-24 18:49
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-3-24 19:46:21 | 显示全部楼层
参考 15#
椭圆锥体参数:\(a=3,b=2,c=5\)
锥底椭圆按角度均匀分成 12 段,即:
\(t=\{0,\frac{\pi}{6},\frac{\pi}{3},\frac{\pi}{2},\frac{2\pi}{3},\frac{5\pi}{6},\pi,\frac{7\pi}{6},\frac{4\pi}{3},\frac{3\pi}{2},\frac{5\pi}{3},\frac{11\pi}{6},2\pi\}\)
得到 13 个点,直角坐标为:
{{5.74443, 1.00076}, {5.18727, 2.41707}, {4.31089, 3.41559}, {3.46574, 4.12172},
{2.62504, 4.83313}, {1.49092, 5.52514}, {3.57043*10^-16, 5.83095}, {-1.49092, 5.52514},
{-2.62504, 4.83313}, {-3.46574, 4.12172}, {-4.31089, 3.41559}, {-5.18727, 2.41707},
{-5.74443, 1.00076}}
以两点直线距离估计相应的弧长,则椭圆周长的近似值为 15.8074 。
理论周长为 \(2\pi b+4(a-b)=\)16.5664 。
绝对误差为 16.5664 - 15.8074 = 0.759004
相对误差为:1 - 15.8074 / 16.5664 = 4.5816%
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-3-24 19:59:17 | 显示全部楼层
有实时性要求意味着用于计算的时间有限制。
如果有可能就换个单片机,现在的单片机计算速度应该能胜任。
不排除可以把数值积分代码也设计进去。
当然这与分配用于计算的时间有关。

取点的位置应该根据展开曲线的曲率半径来定。
曲率半径大的弧段,点按排得稀一点;曲率半径小的弧段,点按排得密一点。
这样可以对提高计算精度有一定的帮助。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-3-24 23:06:26 | 显示全部楼层
再说一个方法:
首先用数学软件计算出“精确”的展开曲线数据。然后用初等函数进行拟合。
涉及到的初等函数很有可能是线性函数和三角函数(级数)。

点评

所以我一直说先要找到准确的理论表达式,然后利用用渐进分析的级数方法得到较简单的代数式,这才有理论保证~  发表于 2024-3-25 05:37
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2024-3-25 08:44:16 | 显示全部楼层
本帖最后由 Jack315 于 2024-3-25 09:44 编辑

继续 15# 的例子……

对 \(t\in[0,2\pi]\) 每隔 \(\frac{2\pi}{360}\) 计算一对 \((\rho,\theta)\) 。

用 \((t,\rho)\) 数据进行拟合得:
\(\rho=k_1+a_1\sin(b_1 t+c_1)+a_2\sin(b_2 t+c_2)+k_2\)
k1 = 5.610884606303115
a1 = 0.223
b1 = 1.999
c1 = 1.574
a2 = 0.002278
b2 = 4.038
c2 = -1.689
k2 = -0.000478906482411968
注:最后再加一个(负的)常数 \(k_2\) 是对拟合误差的调整。

用 \((t,\theta)\) 数据进行拟合得:
\(\theta=\beta_1 t+\beta_0+a_1\sin(b_1 t+c_1)+a_2\sin(b_2 t+c_2)\)
beta1 = 0.439746114054247
beta0 = 0.0168104449372901
a1 = 0.03573
b1 = 2.005
c1 = -0.0155
a2 = 0.02903
b2 = 0.191
c2 = 5.683

拟合误差在 \(1E-4\) 级别。
拟合函数用 Matlab 获得,附件是拟合结果的 Excel 文档:
DataPolar.rar (118.96 KB, 下载次数: 1)
展开曲线的计算,曲线拟合等,我所知道的编程软件有:
  • Mathematica
  • Matlab
  • Python

如果需要更高的拟合精度,可以考虑在拟合函数中增加更多的三角函数 \(\sin\) 的谐波分量。
反之则可以减少三角函数 \(\sin\) 的谐波分量。
谐波分量越多,拟合精度越高,而计算时间则越长。
两者可以根据具体应用进行平衡。

其它的椭圆台展开曲线的 \((t,\rho)\) 和 \((t, \theta)\) 估计有类似的拟合函数形式。
正弦函数的计算有快速和足够精度的 Cordic 算法,
该算法甚至可以用整型数(定点小数)来计算。
如果最终需要的是直角坐标数据,涉及的依然是三角函数 \(\sin\) 的计算。

点评

应该可以的,详见 23# 关于建模的讨论。  发表于 2024-3-25 15:55
有办法计算出k1,a1,b1,c1,a2,b2,c2,k2关于a,b,c,的表达式吗?  发表于 2024-3-25 14:00
大侠过奖了,谢谢 :)  发表于 2024-3-25 09:19
不错,做事有想法有干劲~值得点赞  发表于 2024-3-25 09:17

评分

参与人数 1威望 +9 金币 +12 贡献 +12 经验 +9 鲜花 +12 收起 理由
数学星空 + 9 + 12 + 12 + 9 + 12

查看全部评分

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-4-28 20:23 , Processed in 0.082458 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表