Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...

Rezultat RMN
 Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor

Discuții despre TVR Sport HD
 Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android

Recomandare bicicleta e-bike 20&#...
 Bing-Content removal tool

Nu pot accesa monitorulsv.ro de l...

Cum sa elimini urmele de acnee?

Wc Geberit
 

[MATLAB][PLOT] sferă

  • Please log in to reply
5 replies to this topic

#1
Saurian

Saurian

    Active Member

  • Grup: Banned
  • Posts: 1,280
  • Înscris: 02.09.2008
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
soarce

soarce

    Active Member

  • Grup: Members
  • Posts: 1,467
  • Înscris: 02.10.2008
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
Saurian

Saurian

    Active Member

  • Grup: Banned
  • Posts: 1,280
  • Înscris: 02.09.2008

View Postsoarce, 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 Files


Edited by Saurian, 17 January 2011 - 23:04.


#4
soarce

soarce

    Active Member

  • Grup: Members
  • Posts: 1,467
  • Înscris: 02.10.2008
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
Saurian

Saurian

    Active Member

  • Grup: Banned
  • Posts: 1,280
  • Înscris: 02.09.2008

View Postsoarce, 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.
Motivul pentru care am ales ca raza să fie sqrt(3200) este că în cazul în care x=y=R=40 avem pentru componenta a treia: sqrt(1600-1600-1600) ce e un număr complex și îmi dă aceeași eroare. Cred că și felul în care aleg coordonatele e greșit pentru că nu se poate ca x și y să atingă concomitent maximul domeniului la o sferă.

Edited by Saurian, 17 January 2011 - 23:13.


#6
soarce

soarce

    Active Member

  • Grup: Members
  • Posts: 1,467
  • Înscris: 02.10.2008
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

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate