Betragsberechnung eines Vectors in C
====================================
Guten Abend!!
Hab mal eine kleine Frage.
Ich möchte in C den Betrag eines 3D Vectors berechnen, über phythagoras.
Betrag(bzw Länge) x = Wurzel aus der Summe der Quadrate.
Nun muss man ja gezwungenermassen mit potenzen rechnen, bzw mit
funktionen die diese berechnen. (sqrt/pow)
Kann man das nicht irgendwie umgehen? normalerweise sagt man ja X^2 =
x*x oder pow(x, 2) oder sqr(x)
ich würde gerne auf die bibliotheksfunktionen komplett verzichten.
das quadrat am liebsten so x = x^2; (ich weiß der "^" ist eigentlich der
Xor op) und ebenso die quadratwurzel mit x = x^(1/2) (werde ich vorher
noch mit 1000 multiplizieren, da ich die berechnung in int durchführen
möchte.)
momentan sieht die berechnung so aus:
1 | betrag = ( (adc.raw_data[0]-X_OFFSET) * (adc.raw_data[0]-X_OFFSET) );
|
2 | betrag += ( (adc.raw_data[1]-Y_OFFSET) * (adc.raw_data[1]-Y_OFFSET) );
|
3 | betrag += ( (adc.raw_data[2]-Z_OFFSET) * (adc.raw_data[2]-Z_OFFSET) );
|
4 | betrag = (ui16) sqrt(betrag);
|
kann ich die sqrt() funktion irgendwie umgehen?
Grund ist folgender (mit sqrt):
AVR Memory Usage
----------------
Device: atmega16
Program: 6878 bytes (42.0% Full)
(.text + .data + .bootloader)
Data: 676 bytes (66.0% Full)
und ohne, der grund liegt klar auf der hand...
AVR Memory Usage
----------------
Device: atmega16
Program: 3776 bytes (23.0% Full)
(.text + .data + .bootloader)
Data: 412 bytes (40.2% Full)