konto usunięte

Temat: Punkt wewnatrz wielokata

Witam mam problem z przypisaniem argumentu A i B do argumentu v1 i v2. Jak to rozwiązać?(funkcja AngleBetweensVectors)

#include "math.h"
#include "Calculations.h"


double VectorLength(CVECTOR v){

return sqrt(v.x*v.x + v.y*v.y + v.z*v.z );
}


double DotProduct(CVECTOR v1, CVECTOR v2){

return ((v1.x + v2.x)*(v1.y*v2.y)*(v1.z*v2.z));
}

double AngleBetweenVectors(CVECTOR v1, CVECTOR v2){

double AngleAB;
AngleAB = acos(DotProduct(A,B)/VectorLength(A)*VectorLength(B));
return AngleAB;
}


Zamieniłem tu AngleAB = acos(DotProduct(A,B)/VectorLength(A)*VectorLength(B)) parametry A na v1 i B na v2 i działa ale docelowo musze mieć tak jak we wzorze AngleAB = acos(DotProduct(A,B)/VectorLength(A)*VectorLength(B)) potrzebne do kolejnej funkcji



bool InsidePolygon( parametry){

A.x = Polygon[i].x - Point.x;
A.y = Polygon[i].y - Point.y;
A.z = Polygon[i].z - Point.z;

B.x = Polygon[i+1].x - Point.x;
B.y = Polygon[i+1].y - Point.y;
B.z = Polygon[i+1].z - Point.z;

AngleSum = AngleSum + AngleBetweenVectors(A,B);
}
Rafał Poręba edytował(a) ten post dnia 01.09.12 o godzinie 19:31

konto usunięte

Temat: Punkt wewnatrz wielokata

Rafał Poręba:
Zamieniłem tu AngleAB = acos(DotProduct(A,B)/VectorLength(A)*VectorLength(B)) parametry A na v1 i B na v2 i działa ale docelowo musze mieć tak jak we wzorze AngleAB = acos(DotProduct(A,B)/VectorLength(A)*VectorLength(B)) potrzebne do kolejnej funkcji

Ajajaj, chyba powinieneś sięgnąć po jakąś książkę z podstawami podstaw. To są argumenty funkcji przekazywane przez wartość a więc zmienne lokalne. Czy się nazywają A, v1, czy aLa_Ma_Kota nie ma znaczenia dla innych funkcji.


double AngleBetweenVectors(CVECTOR v1, CVECTOR v2){
...
AngleAB = acos(DotProduct(A,B)/VectorLength(A)*VectorLength(B));

To nie działa bo kompilator nie wie (bo skąd ma wiedzieć) co to jest A i B.


double AngleBetweenVectors(CVECTOR v1, CVECTOR v2){
...
AngleAB = acos(DotProduct(v1,v2)/VectorLength(v1)*VectorLength(v2));

To działa bo napisałeś kompilatorowi, że v1 to parametr do funkcji i jest typu CVECTOR (przy okazji - poszperaj trochę o konwencji nazewnictwa zmiennych/funkcji/klas - duże/małe litery).


double AngleBetweenVectors(CVECTOR A, CVECTOR B){
...
AngleAB = acos(DotProduct(A,B)/VectorLength(A)*VectorLength(B));

To zadziała dokładnie tak samo. W wynikowej binarce i tak te wszystkie nazwy A, v1 itd zamieniają się na adresy w pamięci więc nie ma znaczenia jak się to nazywa, ważne żeby w obrębie bloku {} było takie samo.

Następna dyskusja:

Punkt serwisowy




Wyślij zaproszenie do