Grafika 3D
 
  Zarejestruj siŕ
::  Newsy  ::  Pliki  ::  Twoje Konto  ::  Forum  ::
Menu
· Strona g│ˇwna
· Forum
· Linki
· Lista u?ytkownikˇw
· O nas...
· Pliki
· Statystyki
· Twoje Konto
Tutoriale
· API
· Matematyka
· Teoria
· Direct3D
· OpenGL
· Techniki
Kto Jest Online
Aktualnie jest 36 goŠ(ci) i 0 u┐ytkownik(ˇw) online.

Jeste anonimowym u┐ytkownikiem. Mo┐esz siŕ zarejestrowaŠ za darmo klikaj▒c tutaj
Grafika 3D: Forum

Grafika 3D :: Zobacz temat - Kat pomiedzy wektorami
Zaloguj Rejestracja FAQ U┐ytkownicy Szukaj
Strona po?wi?cona programowaniu grafiki 3D

Forum Grafika 3D Strona G│ˇwna -> C++ -> Kat pomiedzy wektorami
Napisz nowy temat  Odpowiedz do tematu Zobacz poprzedni temat :: Zobacz nastŕpny temat 
Kat pomiedzy wektorami
PostWys│any: Sro Lis 22, 2006 8:54 pm Odpowiedz z cytatem
Yabol
User
User
 
Do│▒czy│: Apr 11, 2006
Posty: 33




Cze! Mam taki kod obliczajacy kat pomiedzy wektorami:
Kod:

typedef struct
{
        double x;
        double y;
        double d;

        double nx;
        double ny;

}WEKTOR;

void Create_Wektor(WEKTOR *p_wektor, float x1, float x2, float y1, float y2)
{
     double t1, t2;
     t1 = x2 - x1;
     t2 = y2 - y1;
     
     p_wektor->x = t1;
     p_wektor->y = t2;
     d = sqrt(pow(t1, 1.0) + pow(t2, 1.0));
     p_wektor->d = d;

     p_wektor->nx = t1/d;
     p_wektor->nx = t2/d;}

WEKTOR c, d, e;
Create_Wektor(&c, 0, 0, 0, 3);
Create_Wektor(&d, 0, 3, 3, 0);
Create_Wektor(&e, 3, 0, 0, 1);
double kat1 = (acos(c.nx*d.nx+c.ny*d.ny)*180)/3.141592;
double kat2 = (acos(d.nx*e.nx+d.ny*e.ny)*180)/3.141592;
double kat3 = (acos(e.nx*c.nx+e.ny*c.ny)*180)/3.141592;

no i po wykonaniu tego kodu zmienna kat1 i kat2 i kat3 przyjmuja dziwna wartosc:
Kod:
-1.#IND
.
Zobacz profil autora WyÂlij prywatn▒ wiadomoŠ
 
PostWys│any: Pi▒ Lis 24, 2006 11:47 am Odpowiedz z cytatem
Yabol
User
User
 
Do│▒czy│: Apr 11, 2006
Posty: 33




Juz problem rozwiazalem(popelnilem glupi blad) ale teraz pojawiel sie inny problem z wynikiem katow tu wstawiam poprawiony kod:
Kod:

typedef struct
{
        double x;
        double y;
        double d;

        double nx;
        double ny;
}WEKTOR;

void Create_Wektor(WEKTOR *p_wektor, float Ax, float Ay, float Bx, float By)
{
     double t1, t2, d;
     t1 = Bx - Ax;
     t2 = By - Ay;
     
     p_wektor->x = t1;
     p_wektor->y = t2;
     d = sqrt(pow(t1, 2.0) + pow(t2, 2.0));
     p_wektor->d = d;

     p_wektor->nx = t1/d;
     p_wektor->ny = t2/d;
}

WEKTOR c, d, e;
Create_Wektor(&c, 0, 0, 0, 3);
Create_Wektor(&d, 0, 3, 3, 0);
Create_Wektor(&e, 3, 0, 0, 0);

double kat1 = (acos(c.nx*d.nx+c.ny*d.ny)*180)/3.141592;
double kat2 = (acos(d.nx*e.nx+d.ny*e.ny)*180)/3.141592;
double kat3 = (acos(e.nx*c.nx+e.ny*c.ny)*180)/3.141592;

Zmienne kat1, kat2, kat3 przyjmuja takie wartosci:
kat1 135
kat2 135
kat3 90
A figura ktorej mierze katy to trojkat prostokatny i zamienne powinny otzrymywac takie wartosci:
kat1 45
kat2 45
kat3 90
A nie otrzymuja ich. Co zle robie? Gdzie jest blad?
Zobacz profil autora WyÂlij prywatn▒ wiadomoŠ
 
PostWys│any: Pi▒ Lis 24, 2006 10:58 pm Odpowiedz z cytatem
lalala
User
User
 
Do│▒czy│: Mar 04, 2006
Posty: 13




Dostajesz prawid?owe wyniki, nie mierzysz k?tˇw w trˇjk?cie a k?t mi?dzy wektorami. Trˇjk?t masz tak zbudowany ?e koniec jednego wektora jest w tym samym punkcie co pocz?tek innego wektora. Jak obliczasz k?t z iloczynu wektorowego to pocz?tki wektorˇw s? w tym samym punkcie. Teraz sobie przesu? twˇj wektor tak aby zaczepione by?y w tym samym punkcie i wida? ?e k?t jest 135 a nie 45.
Zobacz profil autora WyÂlij prywatn▒ wiadomoŠ
 
PostWys│any: Nie Sie 24, 2008 5:52 pm Odpowiedz z cytatem
DemoLisH
User
User
 
Do│▒czy│: Aug 24, 2008
Posty: 5




dzieki za wzor szukalem go tyle czasu o.0
jedyny ktory znalazlem to byl atn(y1/x1)-atn(y2/x2) ale cos mi nie za bardzo dzialal

czy w visual basicu jest funkcja acos? zwykle testuje w visual basicu bo najmniej pisania, a potem do c++ Laughing

ps. wyniki masz prawidlowe
Zobacz profil autora WyÂlij prywatn▒ wiadomoŠ
 
Kat pomiedzy wektorami
  Forum Grafika 3D Strona G│ˇwna -> C++
Nie mo┐esz pisaŠ nowych tematˇw
Nie mo┐esz odpowiadaŠ w tematach
Nie mo┐esz zmieniaŠ swoich postˇw
Nie mo┐esz usuwaŠ swoich postˇw
Nie mo┐esz g│osowaŠ w ankietach
Wszystkie czasy w strefie CET (Europa)  
Strona 1 z 1  

  
  
  
Username:      Password:     

~ or ~
Register

  
 Napisz nowy temat  Odpowiedz do tematu  


Powered by phpBB © 2001-2003 phpBB Group
Theme created by Vjacheslav Trushkin
Forums ©
Nasze newsy s� w RSS: backend.php
PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Tworzenie strony: 0.08 sekund

:: Layout strony zosta│ stworzony przez www.nukemods.com w oparciu o styl phpbb2 Helius, ktˇrego autorem jest Cyberalien ::