[MATLAB][PLOT] sferă
Last Updated: Jan 18 2011 01:32, Started by
Saurian
, Jan 17 2011 21:31
·
0
#1
Posted 17 January 2011 - 21:31
Am o problemă în matlab și nu pot nicicum să găsesc o soluție. Vreau să plotez un obiect în matlab. Să luăm ca un exemplu o sferă. Nu vreau să folosesc funcția sphere ci o funcție generală în care să-i dau X, Y și Z și să-mi ploteze. Din ce am găsit ca soluții una ar fi funcția surf. Dar nu știu ce îi dau greșit că parcă nu e în stare să-mi îndoaie cum trebuie planul încât să iasă o sferă. Am scris ceva de genul:
x=1:20; y=1:20; [X,Y] = meshgrid(x,y); Z = sqrt(1600 - X.^2 - Y.^2); surf(X,Y,Z) și ar trebui să-mi iasă o jumătate de sferă ceea ce nu iasă pentru cei care testează codul. Chestia e că dacă la x, y și z îi dau coordonatele cu funcția sphere totul merge ok. Ce greșesc? Am luat cazul sferei dar aș vrea să fac paraboloizi sau hiperboloizi sau tot felul de obiecte date prin niște funcții. Are cineva vreo idee? Mulțumesc anticipat! |
#2
Posted 17 January 2011 - 22:27
1) Functia pe care vrei sa o reprezinti trebuie sa fie bijectiva. Ai doua posibilitati: fie desenezi cele doua semisfere nordica si sudica separat (+/-sqrt(R*R-x*x-y*y)), fie parametrizezi intreaga sfera.
2) Dupa domeniul spatial pe care l-ai ales nu o sa poti vedea nimic. Raza sferei tale este de 40 de unitati, pe cand domeniul este 1->20 unitati, ca sa ai un domeniu cumprinzator ar trebui sa folosesti [-60:60]. |
#3
Posted 17 January 2011 - 22:56
soarce, on 17th January 2011, 22:27, said: 1) Functia pe care vrei sa o reprezinti trebuie sa fie bijectiva. Ai doua posibilitati: fie desenezi cele doua semisfere nordica si sudica separat (+/-sqrt(R*R-x*x-y*y)), fie parametrizezi intreaga sfera. 2) Dupa domeniul spatial pe care l-ai ales nu o sa poti vedea nimic. Raza sferei tale este de 40 de unitati, pe cand domeniul este 1->20 unitati, ca sa ai un domeniu cumprinzator ar trebui sa folosesti [-60:60]. Pentru punctul 1 mi-am dat seama de chestia respectivă. Pentru punctul 2 nu pot folosi pe x și y să ia valori în domeniul spus de tine că îmi dă eroare la surf că nu merge cu numere complexe ( poate nu am înțeles la ce te referi). În schimb am făcut unele modificări și am primit un rezultat mai bun dar nu îndeajuns. Iată codul scris de mine: x=-40:40; >> y=-40:40; >> [X,Y] = meshgrid(x,y); >> Z = -sqrt(3200 - X.^2 - Y.^2); >> surf(X,Y,Z) >> hold on >> Z = sqrt(3200 - X.^2 - Y.^2); >> surf(X,Y,Z) și mi-a ieșit prima imagine. Pentru codul x=0:20; >> y=0:20; >> [X,Y] = meshgrid(x,y); >> Z = -sqrt(3200 - X.^2 - Y.^2); >> surf(X,Y,Z) >> hold on >> Z = sqrt(3200 - X.^2 - Y.^2); >> surf(X,Y,Z)mi-a ieșit imaginea 2. Deși a doua imagine e mult mai bună decât prima totuși nu e de ajuns. Ce mai trebuie? Și de ce imaginile cele două sunt așa cum sunt? Probabil nu pricep cum desenează matlab... Attached FilesEdited by Saurian, 17 January 2011 - 23:04. |
#4
Posted 17 January 2011 - 23:03
Am gresit eu, pentru calcul +/-sqrt(R*R-x.*x-y.*y) alege domeniul x,y [-R,R], la vizualizare alegi un domeniu [-R1,R1] unde R1>R. Normal ca se plange la valoril complexe.
A doua imagine e buna doar ca e o sfera taiata, mareste domeniu la +/-sqrt(3200). Sau alege un patrat perfect, de ex: 3600. Edited by soarce, 17 January 2011 - 23:05. |
#5
Posted 17 January 2011 - 23:09
soarce, on 17th January 2011, 23:03, said: Am gresit eu, pentru calcul +/-sqrt(R*R-x.*x-y.*y) alege domeniul x,y [-R,R], la vizualizare alegi un domeniu [-R1,R1] unde R1>R. Normal ca se plange la valoril complexe. A doua imagine e buna doar ca e o sfera taiata, mareste domeniu la +/-sqrt(3200). Sau alege un patrat perfect, de ex: 3600. Edited by Saurian, 17 January 2011 - 23:13. |
#6
Posted 18 January 2011 - 01:32
Ca sa generezi corect o calota trebuie sa elimini valorile complexe ale lui z, poti face asa:
>>z=0.5*(1+sign(1600-x1.*x1-y1.*y1)).*(1600-x1.*x1-y1.*y1); >> surf(x1,y1,z); Problema este ca iti vor apare si zonele cu z=0, se pot elimina inlocuindu-le cu NaN (Not a Number) si astfel nu vor fi reprezentate grafic. Mai simplu, ai comanda "sphere": >> help sphere SPHERE Generate sphere. [X,Y,Z] = SPHERE(N) generates three (N+1)-by-(N+1) matrices so that SURF(X,Y,Z) produces a unit sphere. [X,Y,Z] = SPHERE uses N = 20. SPHERE(N) and just SPHERE graph the sphere as a SURFACE and do not return anything. SPHERE(AX,...) plots into AX instead of GCA. See also ellipsoid, cylinder. Reference page in Help browser doc sphere >> |
Anunturi
Bun venit pe Forumul Softpedia!
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users