找出3D空间中两个对象的公式
Figuring out the formula for two objects in 3d space
我正在尝试找出公式,以获取3D空间中两个对象之间的距离。到目前为止,我运行程序时的答案是错误的:
float Distance3D(const float & object1X ,
const float & object1Y ,
const float & object1Z ,
const float & object2X ,
const float & object2Y ,
const float & object2Z )
{
float x = pow ((object2X - object1X),2);// for x
float y = pow ((object2Y - object1Y),2);// for y
float z = pow ((object2Z - object1Z),2);// for z
float objectDistance = 0.0f;
objectDistance = sqrt(object2X*object1X + object2Y*object1Y + object2Z*object1Z);
cout << objectDistance << endl;
return objectDistance;
}
如果要在3D空间中2分之间的欧几里得距离,您的代码应该更像
objectDistance = sqrt((object2X-object1X)*(object2X-object1X) +
(object2Y-object1Y)*(object2Y-object1Y) +
(object2Z-object1Z)*(object2Z-object1Z));
或更简单地使用您的平方距离变量x,y,z
:
objectDistance = sqrt(x + y + z);
,除非您严格对3-D空间中的两个点的距离感兴趣,否则Gilbert-Johnson-Keerthi距离算法是您可能感兴趣的。
通常使用毕达哥拉斯定理找到3D空间中的距离。
公式是
d^2=(x0-x1)^2+(y0-y1)^2+(z0-z1)^2
其中 d
是点之间的距离。
使用此公式,您的代码应该看起来像
float Distance3D(const float & object1X ,
const float & object1Y ,
const float & object1Z ,
const float & object2X ,
const float & object2Y ,
const float & object2Z )
{
float delta_x = pow (object2X - object1X,2);// for x
float delta_y = pow (object2Y - object1Y,2);// for y
float delta_z = pow (object2Z - object1Z,2);// for z
float objectDistance = 0.0f;
objectDistance = sqrt(delta_x*delta_x + delta_y*delta_y + delta_z*delta_z);
cout << objectDistance << endl;
return objectDistance;
}
有趣的是,对于高维数据,该指标下降和曼哈顿距离的有用性可以成为一个优选的度量。已经写了一篇题为"高维空间中距离指标令人惊讶的行为"的论文(2001)。
您的公式不正确;查看2D距离公式,然后将其扩展到3D。
还注意与获得2D/3D向量长度的公式的相似之处。
您应该尝试每个组件差的平方的平方根。请参阅公式
相关文章:
- 如何返回一个类的两个对象相加的结果
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 停止cmake target_link_libraries将插件中静态库的两个对象文件链接到静态库本身
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 如何在Qt中连接来自不同窗口的两个对象?
- 是否可以使用非常量指针调用非常量函数,以及当两个unique_ptrs指向同一个对象时程序的行为方式?
- C++两个对象,其中包含指向同一数组不同部分的指针
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 绘制一个对象,比较模具缓冲区的两个不同值
- C++控制台应用,其中有两个冲突的对象不工作
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 当两个 std::map 对象相同时
- C++:在另外两个对象之间共享一个对象
- 为什么这两个卡片对象不等同?