MATLAB Answers

# Rotating a 2D profile to make 3D

89 views (last 30 days)
Richard McCulloch on 25 Mar 2014
So I have a profile that I am rotating to make a 3D surface like this
a=0.661/0.511;
r=2.8179;
vo=1;
m=0.511;
theta=linspace(0,pi);
vp=vo./(1+a.*(1-cos(theta)));
dOmega=r^2/2.*(vp./vo).^2.*(vo./vp+vp./vo-sin(theta).^2);
figure
plot(dOmega.*cos(theta),dOmega.*sin(theta),'r','LineWidth',2)
Which produces the following plot I am trying to make a surface using the cylinder command like this
[X,Y,Z] = cylinder(dOmega.*sin(theta));
figure
surf(8.*Z,Y,X)
However, the profile negates the x-part of the 2D profile and instead of rounded ends it comes out pointy as shown below. Does anyone know how to get around this? Thank you in advance for your help!
Richard
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Accepted Answer

Richard McCulloch on 25 Mar 2014
OK, so I parametrized the functions and it worked out. Here is the completed code for those interested. It calculates the compton scattering cross section envelope at a specified gamma ray energy.
a=0.255/0.511;
r=2.8179;
vo=1;
m=0.511;
F = @(z)r^2/2.*((vo./(1+a.*(1-cos(z))))./vo).^2.*...
(vo./(vo./(1+a.*(1-cos(z))))+...
(vo./(1+a.*(1-cos(z))))./vo-sin(z).^2);
t = linspace(0,2*pi,55);
z = linspace(0,pi,55);
[T,U] = meshgrid(t,z);
X = F(U).*sin(U).*cos(T);
Y = F(U).*sin(U).*sin(T);
Z = F(U).*cos(U);
surf(Z,Y,X,X.^2+Y.^2+Z.^2)
shading interp
axis vis3d
axis equal
title('Differential Cross Section (10^{-26} cm^2/electron)')
This is the output Richard
##### 3 CommentsShowHide 2 older comments
Richard McCulloch on 2 May 2019
This is the Klein–Nishina formula for Compton Scattering angle calculations. For the purpose of this code a, r, m, and vo are just function constants. “The Atomic Nucleus” by R. Evans has a good treatment for a more detailed understanding.

Sign in to comment.

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!