跳至內容

File:Argument principle1.png

頁面內容不支援其他語言。
這個檔案來自維基共享資源
維基百科,自由的百科全書

Argument_principle1.png (200 × 168 像素,檔案大小:7 KB,MIME 類型:image/png


摘要

描述
English: Argument principle. The simple contour C (black), the zeros of f (blue) and the poles of f (red). Here we have
來源 自己的作品
作者
Public domain 此作品已由其作者,Oleg Alexandrov,釋出至公有領域。此授權條款在全世界均適用。

這可能在某些國家不合法,如果是的話:
Oleg Alexandrov授予任何人有權利使用此作品於任何用途,除受法律約束外,不受任何限制。

其他版本
File:Argument principle1.svg是本檔案的向量版本。 如果品質不低,就應該優先使用該檔案,而非PNG檔案。

File:Argument principle1.png → File:Argument principle1.svg

更多資訊請參閱Help:SVG/zh

其他語言
Alemannisch  Bahasa Indonesia  Bahasa Melayu  British English  català  čeština  dansk  Deutsch  eesti  English  español  Esperanto  euskara  français  Frysk  galego  hrvatski  Ido  italiano  lietuvių  magyar  Nederlands  norsk bokmål  norsk nynorsk  occitan  Plattdüütsch  polski  português  português do Brasil  română  Scots  sicilianu  slovenčina  slovenščina  suomi  svenska  Tiếng Việt  Türkçe  vèneto  Ελληνικά  беларуская (тарашкевіца)  български  македонски  нохчийн  русский  српски / srpski  татарча/tatarça  українська  ქართული  հայերեն  বাংলা  தமிழ்  മലയാളം  ไทย  한국어  日本語  简体中文  繁體中文  עברית  العربية  فارسی  +/−
新SVG圖片



The original description page was here. All following user names refer to en.wikipedia.

Made by myself with Matlab

Public domain 此作品已由其作者,Oleg Alexandrov,釋出至公有領域。此授權條款在全世界均適用。

這可能在某些國家不合法,如果是的話:
Oleg Alexandrov授予任何人有權利使用此作品於任何用途,除受法律約束外,不受任何限制。

Source code (MATLAB)

Source code. The function arrow() used here is written and copyrighted by somebody else. I don't know the terms. Everything else is written by me, which I put in the public domain.

function main() % draw a closed spline curve with some points inside 

   curve_linewidth=1.8;  arrowsize=8; arrow_type=2; % make filled trig arrow
   ball_radius=0.015; % how big to make the points representing the zeros

   x=[0 1 1.2 0 0]; y=[0 0.1 1 1 0.5];  % points the spline will go thru

   n=length(x); 
   P=5; Q=n+2*P+1; % P will denote the amount of overlap of the path with itself
   
% Make the 'periodic' sequence xp=[x(1) x(2) x(3) ... x(n) x(1) x(2) x(3) ... ]
% of length Q. Same for yp.
   for i=1:Q
      j=rem(i, n)+1; % rem() is the remainder of division of i by n
      xp(i)=x(j);
      yp(i)=y(j);
   end

% do the spline interpolation
   t=1:length(xp);
   N=100; % how fine to make the interpolation
   tt=1:(1/N):length(xp);
   xx=spline(t, xp, tt);
   yy=spline(t, yp, tt);

% discard the redundant overlap pieces
   start=N*(P-1)+1;
   stop=N*(n+P-1)+1;
   xx=xx(start:stop); 
   yy=yy(start:stop);

   figure(1); clf; hold on; axis equal; axis off; % prepare the screen
   plot(xx, yy, 'k', 'LineWidth', curve_linewidth)% plot the path

% plot the residues and the poles -- see the ball() function below
   ball(0.5,       0.7,    ball_radius, [1, 0, 0]); % red
   ball(0.3187,    0.3024, ball_radius, [0, 0, 1]); % blue
   ball(0.7231,    0.4441, ball_radius, [0, 0, 1]);
   ball(0.7981,    0.7776, ball_radius, [0, 0, 1]);
   ball(0.2854,    0.8026, ball_radius, [1, 0, 0]);
   ball(0.6397,    0.1773, ball_radius, [1, 0, 0]);
   ball(0.2896,    0.5525, ball_radius, [0, 0, 1]);
   ball(0.9774,    0.5817, ball_radius, [1, 0, 0]);
   ball(0.6189,    1.0068, ball_radius, [1, 0, 0]);

   % place the two arrows showing the orientation of the contour
   shift=80; arrow([xx(shift) yy(shift)], [xx(shift+10) yy(shift+10)], ...
		   curve_linewidth, arrowsize, pi/8,arrow_type, [0, 0, 0])
   shift=270; arrow([xx(shift) yy(shift)], [xx(shift+10) yy(shift+10)], ...
		    curve_linewidth, arrowsize, pi/8,arrow_type, [0, 0, 0])

   axis([min(xx)-1, max(xx)+1, min(yy)-1, max(yy)+1]); % image frame

   saveas(gcf, 'argument_principle.eps', 'psc2')% save to file
   disp('Saved to argument_principle.eps. Get antialiased .png in an editor.')

   %%%%%%%%%%%%%%%%%%%%% auxiliary functions ball() and arrow() %%%%%%%%%%%%%%%%%%

function ball(x, y, radius, color) % draw a ball of given uniform color 
   Theta=0:0.1:2*pi;
   X=radius*cos(Theta)+x;
   Y=radius*sin(Theta)+y;
   H=fill(X, Y, color);
   set(H, 'EdgeColor', color);

function arrow(start, stop, thickness, arrowsize, sharpness, arrow_type, color)
   
%  draw a line with an arrow at the end
%  start is the x,y point where the line starts
%  stop is the x,y point where the line stops
%  thickness is an optional parameter giving the thickness of the lines   
%  arrowsize is an optional argument that will give the size of the arrow 
%  It is assumed that the axis limits are already set
%  0 < sharpness < pi/4 determines how sharp to make the arrow
%  arrow_type draws the arrow in different styles. Values are 0, 1, 2, 3.
   
%       8/4/93    Jeffery Faneuff
%       Copyright (c) 1988-93 by the MathWorks, Inc.
%       Modified by Oleg Alexandrov 2/16/03

   
   if nargin <=6
      color=[0, 0, 0]; % default color
   end
   
   if (nargin <=5)
      arrow_type=0;   % the default arrow, it looks like this: ->
   end
   
   if (nargin <=4)
      sharpness=pi/4; % the arrow sharpness - default = pi/4
   end

   if nargin<=3
      xl = get(gca,'xlim');
      yl = get(gca,'ylim');
      xd = xl(2)-xl(1);            
      yd = yl(2)-yl(1);            
      arrowsize = (xd + yd) / 2;   % this sets the default arrow size
   end

   if (nargin<=2)
      thickness=0.5; % default thickness
   end
   
   
   xdif = stop(1) - start(1); 
   ydif = stop(2) - start(2);

   if (xdif == 0)
      if (ydif >0) 
	 theta=pi/2;
      else
	 theta=-pi/2;
      end
   else
      theta = atan(ydif/xdif);  % the angle has to point according to the slope
   end

   if(xdif>=0)
      arrowsize = -arrowsize;
   end

   if (arrow_type == 0) % draw the arrow like two sticks originating from its vertex
      xx = [start(1), stop(1),(stop(1)+0.02*arrowsize*cos(theta+sharpness)),...
	    NaN,stop(1), (stop(1)+0.02*arrowsize*cos(theta-sharpness))];
      yy = [start(2), stop(2), (stop(2)+0.02*arrowsize*sin(theta+sharpness)),...
	    NaN,stop(2), (stop(2)+0.02*arrowsize*sin(theta-sharpness))];
      plot(xx,yy, 'LineWidth', thickness, 'color', color)
   end

   if (arrow_type == 1)  % draw the arrow like an empty triangle
      xx = [stop(1),(stop(1)+0.02*arrowsize*cos(theta+sharpness)), ...
	    stop(1)+0.02*arrowsize*cos(theta-sharpness)];
      xx=[xx xx(1) xx(2)];
      
      yy = [stop(2),(stop(2)+0.02*arrowsize*sin(theta+sharpness)), ...
	    stop(2)+0.02*arrowsize*sin(theta-sharpness)];
      yy=[yy yy(1) yy(2)];

      plot(xx,yy, 'LineWidth', thickness, 'color', color)
      
%     plot the arrow stick
      plot([start(1), stop(1)+0.02*arrowsize*cos(theta)*cos(sharpness)],  ...
	   [start(2), stop(2)+0.02*arrowsize*sin(theta)*cos(sharpness)], ...
	   'LineWidth', thickness, 'color', color)
      
   end
   
   if (arrow_type==2) % draw the arrow like a full triangle
      xx = [stop(1),(stop(1)+0.02*arrowsize*cos(theta+sharpness)), ...
	    stop(1)+0.02*arrowsize*cos(theta-sharpness),stop(1)];
      
      yy = [stop(2),(stop(2)+0.02*arrowsize*sin(theta+sharpness)), ...
	    stop(2)+0.02*arrowsize*sin(theta-sharpness),stop(2)];
      H=fill(xx, yy, color);% fill with black
      set(H, 'EdgeColor', 'none')
      
%     plot the arrow stick
      plot([start(1) stop(1)+0.01*arrowsize*cos(theta)], ...
           [start(2),     stop(2)+0.01*arrowsize*sin(theta)], ...
	 'LineWidth', thickness, 'color', color)
   end

   if (arrow_type==3) % draw the arrow like a filled 'curvilinear' triangle
      curvature=0.5; % change here to make the curved part more (or less) curved
      radius=0.02*arrowsize*max(curvature, tan(sharpness));
      x1=stop(1)+0.02*arrowsize*cos(theta+sharpness);
      y1=stop(2)+0.02*arrowsize*sin(theta+sharpness);
      x2=stop(1)+0.02*arrowsize*cos(theta)*cos(sharpness);
      y2=stop(2)+0.02*arrowsize*sin(theta)*cos(sharpness);
      d1=sqrt((x1-x2)^2+(y1-y2)^2);
      d2=sqrt(radius^2-d1^2);
      d3=sqrt((stop(1)-x2)^2+(stop(2)-y2)^2);
      center(1)=stop(1)+(d2+d3)*cos(theta);
      center(2)=stop(2)+(d2+d3)*sin(theta);

      alpha=atan(d1/d2);
      Alpha=-alpha:0.05:alpha;
      xx=center(1)-radius*cos(Alpha+theta);
      yy=center(2)-radius*sin(Alpha+theta);
      xx=[xx stop(1) xx(1)];
      yy=[yy stop(2) yy(1)];

      H=fill(xx, yy, color);% fill with black
      set(H, 'EdgeColor', 'none')

%     plot the arrow stick
      plot([start(1) center(1)-radius*cos(theta)], [start(2), center(2)- ...
		    radius*sin(theta)], 'LineWidth', thickness, 'color', color);
   end
date/time username edit summary
19:16, 7 March 2006 en:User:141.140.104.11 (fix deprecated cp tag)
01:01, 13 June 2005 en:User:Oleg Alexandrov (replacing "thru" with "through" in comments of computer code is a bit excessive.)
22:09, 12 June 2005 en:User:Bratsche ('thru' -> 'through'; -- <a href="/wiki/User:Humanbot" title="User:Humanbot">Join and fix more!</a>)
23:19, 15 January 2005 en:User:Oleg Alexandrov (added source code.)
18:04, 15 January 2005 en:User:Oleg Alexandrov (Made by myself with Matlab {{PD}})

原始上傳日誌

Legend: (cur) = this is the current file, (del) = delete this old version, (rev) = revert to this old version.

Click on date to download the file or see the image uploaded on that date.

說明

添加單行說明來描述出檔案所代表的內容
Argument principle

在此檔案描寫的項目

描繪內容

著作權狀態 繁體中文 (已轉換拼寫)

多媒體型式 繁體中文 (已轉換拼寫)

image/png

校驗和 繁體中文 (已轉換拼寫)

294b02fad624cf7a6b779facf62404e52d19d5e5

斷定方法:​SHA-1 中文 (已轉換拼寫)

6,960 位元組

168 像素

200 像素

檔案歷史

點選日期/時間以檢視該時間的檔案版本。

日期/時間縮⁠圖尺寸用戶備⁠註
目前2007年6月5日 (二) 15:25於 2007年6月5日 (二) 15:25 版本的縮圖200 × 168(7 KB)Oleg Alexandrov{{Information |Description=Made by myself with Matlab |Source=Originally from [http://en.wikipedia.org en.wikipedia]; description page is/was [http://en.wikipedia.org/w/index.php?title=Image%3AArgument_principle1.png here]. |Date=2005-01-15 (original upl
2006年3月18日 (六) 17:12於 2006年3月18日 (六) 17:12 版本的縮圖200 × 168(7 KB)MaksimLa bildo estas kopiita de wikipedia:en. La originala priskribo estas: Made by myself with Matlab {{PD-user|Oleg Alexandrov}} Source code. The function arrow() used here is written and copyrighted by somebody else. I don't know the terms. Everything else

下列頁面有用到此檔案:

全域檔案使用狀況

以下其他 wiki 使用了這個檔案: