当前位置:首页 > C++ > 正文内容

C++ 计算点到空间直线的距离

admin4年前 (2020-11-08)C++3020

最近的工作中需要计算空间中点到直线的距离,网上找了个算法:链接

很简单,就是余弦定理算出余弦,知道余弦算出正弦,然后求出高也就是距离。当然这里不考虑效率问题,实验性的代码,先能用再优化。

struct Point
{
    double X;
    double Y;
    double Z;

    bool operator==(const Point &p)
    {
        return (this->X == p.X && this->Y == p.Y && this->Z == p.Z);
    }
};

double dis_3D(Point a,Point b,Point s)
{
    double ab=sqrt(pow((a.X-b.X),2.0)+pow((a.Y-b.Y),2.0)+pow((a.Z-b.Z),2.0));    
    double as=sqrt(pow((a.X-s.X),2.0)+pow((a.Y-s.Y),2.0)+pow((a.Z-s.Z),2.0));    
    double bs=sqrt(pow((s.X-b.X),2.0)+pow((s.Y-b.Y),2.0)+pow((s.Z-b.Z),2.0));    
    double cos_A=(pow(as,2.0)+pow(ab,2.0)-pow(bs,2.0))/(2*ab*as);    
    double sin_A=sqrt(1-pow(cos_A,2.0));    
    return as*sin_A;
}



扫描二维码推送至手机访问。

版权声明:本文由lovedm.club发布,如需转载请注明出处。

本文链接:https://lovedm.club/?id=100

分享给朋友:

“C++ 计算点到空间直线的距离” 的相关文章

C++ 函数指针

1、什么是函数指针函数是实现特定功能的程序代码的集合,函数代码在内存中也要占据一段存储空间,这段空间的起始地址称为函数的入口地址。C++规定函数的入口地址为函数的指针,即函数名既代表函数,又是函数的指针(或地址)。C++指向函数的指针变量,定义形式为:返回类型 (*函数指针变量名)(形参列表);可以...

C++ 派生类的析构函数的执行顺序

C++ 派生类的析构函数的执行顺序

C++中派生类是不会继承父类的构造函数和析构函数的,这一点要明确。派生类中构造函数的执行顺序是先父类的构造函数然后当前类,析构函数则相反。举例如下:#include <iostream> using namespace std; class&nb...

C++常量

关于常量的一些形式以及含义在此记录一下:#include <iostream> using namespace std; int main() { //常量,不能改变值 const int a =&n...

C++ 拷贝构造函数

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。通常用于:通过使用另一个同类型的对象来初始化新创建的对象。复制对象把它作为参数传递给函数。复制对象,并从函数返回这个对象。如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有...

OpenCV中简单的添加噪声

随机数生成器用到的是C++11中的新方法。以下代码来自OpenCV计算机视觉编程攻略第三版2.2.2节void salt(Mat image, int n) { default_random_engine generator; unifor...

FY4B warp

#include <iostream> #include <string> #include <gdal_priv.h> #include "gdalwarper.h" using std::string; void wa...