所以外积是v1 = <x1,>v2 = <x2,>定义为v1v2 =
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);