c -如何正确使用外积?



所以外积是v1 = <x1,>v2 = <x2,>定义为v1v2 =z2 - z1y2, z1x2 - x1z2, x1y2 - y1*x2>任何一个输出3200万。但我不知道是我的代码错了,还是错误的方式错了。但我不会收到奇怪的短信。有人能帮我找出代码中的问题吗?

void cross_product( float x1, float y1, float z1,
float x2, float y2, float z2,
float* result_x, float* result_y, float* result_z){
float d = ((y1*z2)-(z1*y2), (z1*x2)-(x1*z2), (x1*y2) - (y1*x2));
printf("v1 (dot) v2 = %f", d);

输入图片描述

正如kaylum所说,您需要将每个向量的结果存储在引用调用的变量return_中。

如果你想计算float d中两点之间的距离,你必须取每个坐标之间距离的两个幂和的平方根。

最后,你的代码应该像这样:
void cross_product( float x1, float y1, float z1,
float x2, float y2, float z2,
float* result_x, float* result_y, float* result_z)
{
*result_x = (y1 * z2) - (z1 * y2);
*result_y = (z1 * x2) - (x1 * z2);
*result_z = (x1 * y2) - (y1 * x2);
float d = sqrtf(powf(x2 - x1, 2) + powf(y2 - y1, 2) + powf(z2 - z1, 2));
printf("v1 (dot) v2 = %f", d);
}

逗号操作符计算每个子表达式,最终结果是最后一个子表达式。所以在你的情况下,这意味着d只会以(x1*y2) - (y1*x2)的结果结束。

对于叉乘,您需要分别处理每个组成部分的结果。这就是API具有输出result变量的原因。将结果存储到这些变量中:

*result_x = (y1 * z2) - (z1 * y2);
*result_y = (z1 * x2) - (x1 * z2);
*result_z = (x1 * y2) - (y1 * x2);

相关内容

  • 没有找到相关文章

最新更新