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
相关产品推荐
相关产品推荐

