![123.png](https://www.mathworks.com/matlabcentral/answers/uploaded_files/247966/123.png)
how to plot quiver evenly along lines?
1 次查看(过去 30 天)
显示 更早的评论
I am currently try to plot electric flux along two lines. but it seem that the electric flux is not spred evenly along this two lines
%%
clear;
clc; % to clear the command line
% to remove all previous variables
%% to set the minimum and maximum values on the plot space (x,y,z axes)
PlotXmin=-3;
PlotXmax=3;
PlotYmin=-3;
PlotYmax=3;
PlotZmin=-3;
PlotZmax=3;
%% to set number of plotting points along x,y and z axes
NumberOfXPlottingPoints=10;
NumberOfYPlottingPoints=10;
NumberOfZPlottingPoints=10;
%% to set number of identical point charge for each 1 meter length
N = 10; % number of point for each 1 meter of length
% Line 1 from -1<x<2 at y=-2, z=0,
xa1 = -1;
xa2 = 2;
L1 = xa2-xa1;%Length of the line charge
% Line 2 from -1<x<2 at y=2, z=0
xb1 = -1;
xb2 = 2;
L2 = xb2-xb1;%Length of the line charge
NL1 = N*L1;
NL2 = N*L2;
dxa= (xa2-xa1)/NL1;
dxb= (xb2-xb1)/NL2;
Xpoints1 = zeros(NL1,1);
Zpoints1 = zeros(NL1,1);
Ypoints1 = zeros(NL1,1);
Xpoints2 = zeros(NL2,1);
Zpoints2 = zeros(NL2,1);
Ypoints2 = zeros(NL2,1);
%% to compute step-size in x,y and z direction berapa jumlah nak langkau
PlotStepX=(PlotXmax-PlotXmin)/(NumberOfXPlottingPoints-1);
PlotStepY=(PlotYmax-PlotYmin)/(NumberOfYPlottingPoints-1);
PlotStepZ=(PlotZmax-PlotZmin)/(NumberOfZPlottingPoints-1);
%% to generate the position vectors
% % untuk create berapa langkau in array
[X,Y,Z]=meshgrid(PlotXmin:PlotStepX:PlotXmax,PlotYmin:PlotStepY:PlotYmax,PlotZmin:PlotStepZ:PlotZmax);%build arrays of plot space
% to initialize matrices of zeros, in x,y and z-direction
Dxa=zeros(NumberOfZPlottingPoints,NumberOfYPlottingPoints,NumberOfXPlottingPoints);
Dza=zeros(NumberOfZPlottingPoints,NumberOfYPlottingPoints,NumberOfXPlottingPoints);
Dya=zeros(NumberOfZPlottingPoints,NumberOfYPlottingPoints,NumberOfXPlottingPoints);
Dxb=zeros(NumberOfZPlottingPoints,NumberOfYPlottingPoints,NumberOfXPlottingPoints);
Dzb=zeros(NumberOfZPlottingPoints,NumberOfYPlottingPoints,NumberOfXPlottingPoints);
Dyb=zeros(NumberOfZPlottingPoints,NumberOfYPlottingPoints,NumberOfXPlottingPoints);
%% General Information on the point charge
rhoL=1e-6; % value of the line charge density (charge per unit length)
%% Computing the vectors of flux density
for kk=1:NumberOfZPlottingPoints % start 1 to number of z plotting
for jj=1:NumberOfYPlottingPoints % start 1 to number of y plotting
for ii=1:NumberOfXPlottingPoints % start 1 to number of x plotting
Xplot=X(kk,jj,ii);%x coordinate of current plot point
Yplot=Y(kk,jj,ii);%y coordinate of current plot point
Zplot=Z(kk,jj,ii);%z coordinate of current plot point
r =[Xplot Yplot Zplot]; %position vector of observation points
D=[0 0 0]; % to initialize the value of the flux density
for kkk = 1:1:NL1
xCenter1 = xa1 +(kkk-1)*dxa +0.5*dxa;
xCenter2 = xb1 +(kkk-1)*dxb +0.5*dxb;
rqk1 = [xCenter1, 2, 0]; %% center point of flux LINE 1
rqk2 = [xCenter2, -2, 0]; %% center point of flux LINE 2
Rk1 = r-rqk1;
Rk2 = r-rqk2;
Xpoints1(kkk) = xCenter1; %%location of line charge
Ypoints1(kkk) = -2; %%location of line charge
Zpoints1(kkk) = 0; %%location of line charge
Xpoints2(kkk) = xCenter2; %%location of line charge
Ypoints2(kkk) = 2; %%location of line charge
Zpoints2(kkk) = 0; %%location of line charge
Rkmag1 = norm(Rk1);
Rkmag2 = norm(Rk2);
if Rkmag1 > 0
Rk_hat1 = Rk1/Rkmag1;
D1 = D + (rhoL)*Rk_hat1/(4*pi*Rkmag1^2);
end
if Rkmag2 > 0
Rk_hat2 = Rk2/Rkmag2;
D2 = D + (rhoL)*Rk_hat2/(4*pi*Rkmag2^2);
end
end
Dxa(kk,jj,ii)=D1(1,1); %get x component at the current observation point
Dya(kk,jj,ii)=D1(1,2); %get z component at the current observation point
Dza(kk,jj,ii)=D1(1,3); %get y component at the current observation point
Dxb(kk,jj,ii)=D2(1,1); %get x component at the current observation point
Dyb(kk,jj,ii)=D2(1,2); %get z component at the current observation point
Dzb(kk,jj,ii)=D2(1,3); %get y component at the current observation point
end
end
end
% to plot the flux density vector lines
h1 = quiver3(X,Y,Z,Dxa,Dya,Dza);
hold on
h2 = quiver3(X,Y,Z,Dxb,Dyb,Dzb);
hold on
% to appropriately labelling the axes
xlabel('x-axis');
ylabel('y-axis');
zlabel('z-axis');
axis([PlotXmin,PlotXmax,PlotYmin,PlotYmax,PlotZmin,PlotZmax]);
grid on
%to plot the line charge distribution L1,L2, L3,L4
h1_rhoL = plot3(Xpoints1,Ypoints1,Zpoints1,'-k','LineWidth',4);
h2_rhoL = plot3(Xpoints2,Ypoints2,Zpoints2,'-k','LineWidth',4);
% h3 = plot3([Xmin1,Xmax1],[0,0],[0,0]); % plot line charge 1
%to put legend on each plot
legend([h1;h2],{'Flux 1';'FLux 2'});
3 个评论
Daniel M
2019-11-13
编辑:Daniel M
2019-11-13
I didn't go through your code but it doesn't look like you're plotting a line charge at all. It looks like you're plotting the flux from two point charges, originating from point 2 and the equivalent location on the second black line. I would suspect it's something to do with the loops only storing the values for the last iteration.
But you seem to have done it properly for the green frame. Just do that, twice. What's the problem?
回答(1 个)
Daniel M
2019-11-13
I just took a closer look and it is what I suspected. In your loop over NL1 you are only storing the outputs, D1 and D2, for the last iteration. So you are basically calculating the field from a single point charge, stored in the last iteration of that inner most loop.
Instead you should do the following. Preallocate D1 and D2 to be zeros of length NL1. Then store each value using D1(kkk,:) = ...; Then sum D1 for x, y, and z and store into Dxa.
There are several other minor quirks with this code but I will let you figure them out :)
3 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!