• 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 问题反馈可发送邮件到stubbornhuang@qq.com

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

计算几何 – 判断三维空间的三个点是否共线

计算几何 发布于2023-08-03 阅读 3,981次 0次评论 0次点赞 本文共1208个字,阅读需要4分钟。

1 三维空间中的共线问题

1.1 如何判断三维空间中的三个点是否共线

在三维空间中,如果三个点共线,就说明这三个点在同一条直线上,就是说这三个点无法组成一个三维平面,即其三个点组成的平面法向量为零向量:(0,0,0)

1.2 使用C++判断三维空间中三个点是否共线

通过上述的分析,我们可以使用C++代码进行实现,示例代码如下

#include <iostream>
#include <math.h>
#define eps 1e-8

struct Point3f
{
    float x;
    float y;
    float z;

    Point3f()
    {
        x = 0.0;
        y = 0.0;
        z = 0.0;
    }

    Point3f(float x_in, float y_in, float z_in)
    {
        x = x_in;
        y = y_in;
        z = z_in;
    }
};

typedef Point3f Vector3f;

// 计算两个三维向量的叉积
Vector3f CrossProduct(Vector3f u, Vector3f v) {
    Vector3f result;
    result.x = u.y * v.z - v.y * u.z;
    result.y = u.z * v.x - u.x * v.z;
    result.z = u.x * v.y - u.y * v.x;
    return result;
}

// 计算两个三维向量的差
Vector3f Sub(Vector3f u, Vector3f v)
{
    Vector3f result;
    result.x = u.x - v.x;
    result.y = u.y - v.y;
    result.z = u.z - v.z;
    return result;
}

// 求解向量大小
double Vlen(Vector3f vec)
{
    return sqrt(vec.x * vec.x + vec.y * vec.y + vec.z * vec.z);
}

// 判断三点是否共线
int IsPointsInline(Point3f p1, Point3f p2, Point3f p3)
{
    return Vlen(CrossProduct(Sub(p1, p2), Sub(p2, p3))) < eps;
}


int main()
{
    Point3f point_a(1.0, 2.0, 3.0);
    Point3f point_b(1.0, 5.0, 6.0);
    Point3f point_c(1.0, 8.0, 9.0);

    int res = IsPointsInline(point_a, point_b, point_c);
    if (res)
    {
        std::cout << "此三点共线" << std::endl;
    }
    else
    {
        std::cout << "此三点不共线" << std::endl;
    }

    return 0;
}

在上述代码中,我们判断了(1.0, 2.0, 3.0)(1.0, 5.0, 6.0)(1.0, 8.0, 9.0)三个点是否共线,从这三个点的坐标上我们可以很清楚的判断这三个点是共线的,上述代码的运行结果也是输出三点共线的。另外为了避免浮点数误差,定义了一个eps做容差,用于规避浮点数误差。

欢迎扫码关注我的微信公众号,及时获取文章更新

微信公众号二维码

本文作者:StubbornHuang

版权声明:本文为站长原创文章,如果转载请注明原文链接!

原文标题:计算几何 – 判断三维空间的三个点是否共线

原文链接:https://www.stubbornhuang.com/2741/

发布于:2023年08月03日 17:04:34

修改于:2023年08月03日 17:04:34

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
计算几何 - 求解三维平面法向量
计算几何
下一篇
Javascript - 数组遍历方式总结
Javascript
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

关注我们的公众号

微信公众号