一点到长方体的最小(大)距离简单计算公式
假设三维欧氏空间的一个正长方体中心在原点(|x|≤a;|y|≤b;|z|≤c;a、b、c为三个大于0的实数),此长方体外有一定点A,坐标位置为(x0,y0,z0)。求点A到此长方体的最小和最大距离的巧妙简单公式。也就是求A点与长方体中(包括边界面)任一点组成的线段中,最短与最长线段长度分别是多少? 长方体各个面所在平面将整个长方体之外的空间划分为数个区域,判断A落在哪个区域(若落在边界上,可以从中任意选一个)。
对于每一个区域来说,落在该区域的点与长方体最近的那个点,必然落在该区域对应的长方体边界上(棱或者面),只需要往该边界上作垂线即可。由于长方体是凸集,故离A最远的点必然在对当前所在区域对应面的对立面(或棱)上的某个顶点,比较A相对于长方体中心的位置,选择较远一侧那个顶点即可。 本帖最后由 sheng_jianguo 于 2017-10-10 19:54 编辑
kastin 发表于 2017-10-10 15:54
长方体各个面所在平面将整个长方体之外的空间划分为数个区域,判断A落在哪个区域(若落在边界上,可以从中 ...
将空间分为几个区域是可以求解,我也试过分为14个区域求解,但需要很多判别式,又需要14个公式。
我的题目意思,能否找到一个统一简单公式(判别式不超过2个)就能求出最小长度,同样能否找到一个统一简单公式(判别式不超过2个)就能求出最大长度?
注:公式中变量仅为a,b,c,x0,y0,z0。 sheng_jianguo 发表于 2017-10-10 19:51
将空间分为几个区域是可以求解,我也试过分为14个区域求解,但需要很多判别式,又需要14个公式。
我的题 ...
不大可能,因为长方体曲面本身就不是一个可以用连续函数精确表示的,因此这个长度必然是分区间表示的。如果要找到一个简单表达式,可以将这些不同结果从形式上观察,然后加入一些特殊的不连续函数(类似开关函数),这样可以在形式上统一起来,但本质上并没有解决问题。
补充内容 (2017-10-11 14:27):
这里的“连续”是笔误,应该是“光滑” 不就是(|x|,|y|,|z|)到(a,b,c)和(-a,-b,-c)的距离嘛 kastin 发表于 2017-10-10 19:57
不大可能,因为长方体曲面本身就不是一个可以用连续函数精确表示的,因此这个长度必然是分区间表示的。如 ...
对于我来说,能用一个公式能计算最短(长)距离就解决问题了,编程简单,不易出错。
用几个连续函数和一个不连续函数,只要计算公式正确,本质上是一样的。
您得出用一个连续函数不能解决此问题推导不严谨,我还是以为用一个连续函数解决此问题是有可能的。 首先对所有坐标求绝对值转化为所有坐标非负情况。然后又构造点各坐标分别为min(a,x)等,这个构造点到原点距离即最短距离 受mathe 启发,导出了计算最短(长)距离公式如下:
最短距离公式:
$sqrt{(max(|xo|-a,0))^2+(max(|yo|-b,0))^2+(max(|zo|-c,0))^2}$
最长距离公式:
$sqrt{(|xo|+a)^2+(|yo|+b)^2+(|zo|+c)^2}$
应该都是连续函数吧。
不知是否有漏洞,是否还有更巧妙的公式。 直接代数解其实也不麻烦啦, 设长方体上的点为$P$ $(x,y,z)$,那么距离表达式是 $PA^2= (x_0-x)^2+(y_0-y)^2+(z_0-z)^2$,其中$|x|<=a,|y|<=b,|z|<=c$。
-------------------------
1)取极值的时候,一定位于边界。即长方体的表面, 边界方程是 $|x|=a\bigcup |y|=b \bigcup|z|=c$.
2)根据对称性,我们只取1/8的区域,于是不妨都取非负部分。所以问题转化为:求$PA^2= (|x_0|-x)^2+(|y_0|-y)^2+(|z_0|-z)^2$的极值,其中$|x|=a\bigcup |y|=b \bigcup|z|=c$.
3) 所以,不难得到 $PA_{max}^2 = (|x_0|+a)^2+(|y_0|+b)^2+(|z_0|+c)^2$
$PA_{min}^2 = (max(|x_0|-a,0))^2+(max(|y_0|-b,0))^2+(max(|z_0|-c,0))^2 $
------------------------------------
不知道对不对,没有仔细推敲,有空再补充。。。。
页:
[1]