You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何正确实现3D两点间距离计算的distance函数

3D点距离函数实现问题解答

你的代码编译失败是几个基础语法和逻辑错误共同导致的,先给出可直接运行的正确实现:

#include <math.h>

typedef struct Point3D {
    double x;
    double y;
    double z;
} point3d_t;

// 3D空间三角形结构体
typedef struct Triangle3D {
    point3d_t pts[3];   // 点之间的边通过点顺序隐式定义
} triangle3d_t;

// 计算两点间欧几里得距离
double distance(point3d_t *p1, point3d_t *p2){
    double dx = p2->x - p1->x;
    double dy = p2->y - p1->y;
    double dz = p2->z - p1->z;
    return sqrt(dx*dx + dy*dy + dz*dz);
}

原错误代码的问题点

  • 指针运算逻辑完全错误:p1、p2是结构体指针,p2-p1的计算结果是两个指针之间的point3d_t元素偏移量,根本不是坐标差值,而且C语言不支持直接对结构体值做乘法运算。
  • 语法错误:函数名不是可被赋值的变量,计算结果需要通过return关键字返回,不能直接给distance赋值。
  • 距离公式逻辑错误:3D空间两点距离需要分别计算x、y、z三个轴的分量差,平方求和后再开平方,原写法完全没有处理y、z维度。
  • 依赖缺失:使用sqrt函数必须引入<math.h>头文件,用gcc编译时需要在编译命令末尾加-lm参数链接数学库,否则会报链接错误。

内容的提问来源于stack exchange,提问作者relaxedbroccoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 16:15:52