- Where are the poles located on your sphere/circle?
- What are the base/original equations that you are using?
Plotting dipole field given in polar coordinates
24 次查看(过去 30 天)
显示 更早的评论
Hello, I'm trying to plot a dipole field around a uniformly polarized sphere.
Here is the setup where u is supposed to represent the field component in r-hat direction and v represents the vector component in theta-hat direction.
[x,y] = meshgrid(-8:0.5:8,-8:0.5:8);
%% for base change
r = sqrt(x.^2 + y.^2); % r in function of (x, y)
theta = atan2(y, x); % theta in function of (x, y)
%% Constants
rad = 2; %radius of sphere
pre = 0.1; %pre factor
scale1=50; %scaling factors for better visibility
scale2=200;
%% Definition of vectors in polar coordinates:
u = ((2*pre)./(r.*r.*r)).*cos(theta); %r-hat
v = (pre./(r.*r.*r)).*sin(theta); %theta-hat
afterwards i go over to plotting the vectors using the quiver function.
I'm not really sure if u*cos(theta) and v*sin(theta) are the right steps here. Basically, I want to plot the vector field given in polar coordinates in cartesian coordinates and I don't know if my transformation steps are correct.
%% plotter
figure(1)
hold on;
for i=1:33
for n=1:33
if((sqrt(x(i,n)*x(i,n)+y(i,n)*y(i,n)))>rad*2)
quiver(x(i,n), y(i,n), u(i,n)*cos(theta(i,n)), v(i,n)*sin(theta(i,n)),scale2,'r')
hold on;
elseif ((sqrt(x(i,n)*x(i,n)+y(i,n)*y(i,n)))>rad)
quiver(x(i,n), y(i,n), u(i,n)*cos(theta(i,n)), v(i,n)*sin(theta(i,n)),scale1,'r')
hold on;
end
end
end
I'm fairly new to matlab so your help is greatly appreciated.
Thank You :)
2 个评论
Nolan Canegallo
2021-1-24
编辑:Nolan Canegallo
2021-1-24
I have a few questions in order to verify my solution.
采纳的回答
Nolan Canegallo
2021-1-24
编辑:Nolan Canegallo
2021-1-24
clear; clc; close all;
This is good practice when you are generating figures and troubleshooting to ensure the previous code, variables, and figures are cleared. I added this to the start of your code.
[x,y] = meshgrid(-8:0.5:8,-8:0.5:8);
%% for base change
r = sqrt(x.^2 + y.^2); % r in function of (x, y)
theta = atan2(y, x); % theta in function of (x, y)
%% Constants
rad = 2; %radius of sphere
pre = 0.1; %pre factor
scale1=1; %scaling factors for better visibility (No longer needed)
scale2=1;
%% Definition of vectors in polar coordinates:
u = ((2*pre)./(r.*r.*r)).*cos(theta); %r-hat
v = (pre./(r.*r.*r)).*sin(theta); %theta-hat
I have only changed the scale factors back to one here. I am assuming that the formulas that you provided are correct.
%% Conversion of u,v into x2 and y2
% 2d rotation equations
% Note that the u and v, need to be converted to x and y for quiver to
% display properly
x2 = u.*cos(theta) - v.*sin(theta);
y2 = u.*sin(theta) + v.*cos(theta);
This block converts the u and v coordinates into x and y values using the coordinate rotation equations.
%% plotter
figure(1)
% Plots circle
th = 0:pi/32:2*pi;
plot(rad*cos(th), rad*sin(th), '--b')
hold on;
%plots points farther than 2 radii
inds2 = x.^2 + y.^2 > 2*rad^2;
quiver(x(inds2),y(inds2),x2(inds2),y2(inds2),scale2,'r')
%plots points greater than 1 radii
inds1 = x.^2 + y.^2 > rad^2;
quiver(x(inds1),y(inds1),x2(inds1),y2(inds1),scale1,'r')
%Sets plot aspect ratio and area to properly display data
daspect([1 1 1])
axis tight
I have updated the plot section to display the circle and increase efficiency. The output is below:
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Surface and Mesh Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!