將問題分解成更小的部分,您將有更容易的時間。歸一化矢量需要將矢量的每個分量除以矢量的幅度。所以你需要一種計算量級的方法。這是一件很常見的事情,所以它保證它自己的功能。
您也可能想要一種打印矢量的方式,以便您可以看到您的函數按照您的預期工作。我爲Vector
寫了一個打印功能的例子。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
typedef struct Vector {
int *components;
int arity;
} Vector;
double squaredMagnitude(Vector);
double magnitude(Vector);
void normalize(Vector);
void printVector(Vector);
double squaredMagnitude(Vector v) {
double sum = 0;
for (int i = 0; i < v.arity; i++) {
int component = v.components[i];
sum += component * component;
}
return sum;
}
double magnitude(Vector v) {
return sqrt(squaredMagnitude(v));
}
void normalize(Vector v) {
double mag = magnitude(v);
for (int i = 0; i < v.arity; i++) v.components[i] /= mag;
}
void printVector(Vector v) {
printf("{");
for (int i = 0; i < v.arity - 1; i++) printf("%i, ", v.components[i]);
if (v.arity != 0) printf("%i", v.components[v.arity - 1]);
printf("}\n");
}
int main() {
int components[] = {0, 5, 0};
int componentCount = sizeof(components)/sizeof(*components);
Vector v;
v.components = malloc(componentCount);
memcpy(v.components, components, sizeof(components));
v.arity = componentCount;
normalize(v);
printVector(v);
}
方不能,你應該做一個矢量結構封裝組件陣列,其計,而不是無謂的周圍分別通過他們這樣。 – Alexander
'modul'以什麼值開頭? –
'modul = ++ x [i] * x [i];'這應該是什麼意思*?順便說一句:modul沒有初始化(並且至少應該是一個double)Plus:該函數不返回一個值,它應該返回一個int。 – wildplasser