Page 1 of 1

Trenger hjelp med 3d-plotting

Posted: 12/04-2009 23:06
by edahl
Hei!
Har lekt meg litt i påsken med å prøve å parameterisere en torus, og kom etter en stund frem til denne funksjonen:
f(x,y)=[Rcosx+rcosxcosy, Rsinx+rsinxcosy, rsiny]
eller
[tex]f(\theta,\phi)=[Rcos \theta+rcos\theta cos\phi, Rsin\theta+rsin\theta cos\phi, rsin\phi][/tex],
hvor R er radius til absolutt senter, og r er radius til "dekket". Mao. bør R>r.
Nedsiden er at jeg ikke aner hvordan jeg kan få plottet den, så jeg vet ikke om jeg faktisk fikk det til! Så jeg hadde satt veldig pris på om noen kunne pekt meg i riktig retning, eller evt. plottet den og gitt meg et screenshot.

Posted: 12/04-2009 23:17
by Markonan
Vet ikke om noen gratisprogrammer for å plotte noe sånt. Har du tilgang på Matlab eller tilsvarende programvare?

Posted: 12/04-2009 23:27
by edahl
Markonan wrote:Vet ikke om noen gratisprogrammer for å plotte noe sånt. Har du tilgang på Matlab eller tilsvarende programvare?
Jeg har faktisk tilgang til det, men jeg aner ikke hvordan jeg bruker det. Hadde håpt på en enkel løsning, men det virker som at jeg må lære meg hele matlabspråket før jeg kan komme noen vei.

Posted: 13/04-2009 00:09
by Markonan
Ble litt mye jobb å skrive et program selv, men etter litt lynkjapp googling fant jeg litt kode. Det ga meg følgende bilde (klikk på for større versjon):
Image

Her er koden:

Code: Select all

function [x, y, z] = torus (r, n, a)
% TORUS Generate a torus.
% torus (r, n, a) generates a plot of a
% torus with central radius a and
% lateral radius r.
% n controls the number of facets
% on the surface.
% These input variables are optional
% with defaults r = 0.5, n = 30, a = 1.
%
% [x, y, z] = torus(r, n, a) generates
% three (n + 1)-by-(n + 1) matrices so
% that surf (x, y, z) will produce the
% torus.
%
% See also SPHERE, CYLINDER
%
% MATLAB Primer, 6th Edition
% Kermit Sigmon and Timothy A. Davis
% Section 11.5, page 65.

if nargin < 3, a = 1 ; end
if nargin < 2, n = 30 ; end
if nargin < 1, r = 0.5 ; end
theta = pi * (0:2:2*n)/n ;
phi = 2*pi* (0:2:n)'/n ;
xx = (a + r*cos(phi)) * cos(theta) ;
yy = (a + r*cos(phi)) * sin(theta) ;
zz = r * sin(phi) * ones(size(theta)) ;
if nargout == 0
    surf (xx, yy, zz) ;
    ar = (a + r)/sqrt(2) ;
    axis([-ar, ar, -ar, ar, -ar, ar]) ;
else
    x = xx ;
    y = yy ;
    z = zz ;
end

Posted: 13/04-2009 00:24
by edahl
Nice!
Tusen takk. Nå er det kanskje håp om at jeg kan få det til.

Er det bildet generert av funksjonen i første innlegg, eller en du fant på nett?

Gleder meg til å se om effektivt 2-3 dager av mitt liv er vært bortkastet, hehe.

EDIT: Så nå at det var den samme funksjonen, bare faktorisert penere :oops: Tusen takk! Nå ble jeg glad.