creasson 发表于 2021-4-12 15:45:35

圆柱轴线求解

已知圆柱面上四个点$A,B,C,D$,及圆柱的半径r, 求圆柱的轴线。

ShuXueZhenMiHu 发表于 2021-4-24 08:09:43

第一个问题,mathematica ,Maple, AutoCAD 这些软件不能解决这样的问题吗?

第二个问题,圆柱的半径是不是多余条件?四个点不是已经可以确认轴线与半径了吗?

wayne 发表于 2021-4-24 09:00:56

点到直线的距离公式是有的. 比如设直线方程的截距式为$ax-by+d=0, cy-az+e=0, bz-cx+f=0$, 那么 点${x,y,z}$到直线的距离$l = \sqrt{\frac{(ax-by+d)^2+(cy-az+e)^2+(bz-cx+f)^2}{a^2+b^2+c^2}}=r$

所以,为了解方程,我们可以设函数$g(x,y,z)=(a x-b y+1)^2+(-a z+c y+1)^2+(b z-c x+1)^2-r^2 (a^2+b^2+c^2)$, 问题就成了 解四元二次多项式方程组了 $g(x_i,y_i,z_i) = 0. i\in Z, 1<=i<=4$

这种情况,我们就不指望有简洁的代数解了. 但是对于给定的数值解,还是非常容易解出来的,比如
{d,e,f}={1,1,1};
g:=(a x-b y+d)^2+(c y-a z+e)^2+(b z-c x+f)^2-R(a^2+b^2+c^2);
pts=RandomInteger[{-100,100},{4,3}];
Solve
随机跑几遍,基本上发现解有0,2,4组.

.

mathe 发表于 2021-4-24 09:30:39

直线方程应该表示为两个平面交线即可,不需要三个平面方程。
但是如果我们采用参数方程会更加方便。
假设轴线上有任意一点$X_0=(x_0,y_0,z_0)$,其方向为$\vec{D}=(a,b,c)$,于是轴线上任意一点可以写成参数形式$(x_0+at,y_0+bt,z_0+ct)$.这里虽然有六个参数$x_0,y_0,z_0,a,b,c$,但是实际上只有四个自由度, 并且为了计算方便,我们可以限制$a^2+b^2+c^2=1$,也就是方向$(a,b,c)$为单位向量。
于是任意一点$A=(x,y,z)$,我们可以先计算向量$\vec{X_0A}$在方向$\vec{D}$上投影为$d=a(x-x_0)+b(y-y_0)+c(z-z_0)$.
于是根据勾股定理,A到直线距离为$|AX_0|^2 - d^2=(x-x_0)^2+(y-y_0)^2+(z-z_0)^2-(a(x-x_0)+b(y-y_0)+c(z-z_0))^2$.
切换到本题场景,那么给定四个点和半径,我们得到四条关于变量$x_0,y_0,z_0,a,b,c$的方程。通常情况我们可以任意指定$z_0$,然后加上$a^2+b^2+c^2=1$的限制,就可以解出所有变量。
页: [1]
查看完整版本: 圆柱轴线求解