Tiedosto:Rotation illustration2.svg

Wikipediasta
Siirry navigaatioon Siirry hakuun

Alkuperäinen tiedosto(SVG-tiedosto; oletustarkkuus 1 005 × 897 kuvapistettä; tiedostokoko 12 KiB)

Yhteenveto

Kuvaus Illustration of Rotation (mathematics)
Päiväys
Lähde self-made, with MATLAB, then tweaked with Inkscape
Tekijä Oleg Alexandrov
SVG kehittely
InfoField
 
Tämä SVG-tiedosto on viallinen, koska siinä on 5 virhettä.
 
Tämä vektorigrafiikkatiedosto luotiin käyttäen apuna ohjelmaa unknown tool

Lisenssi

Public domain Minä, tämän teoksen tekijänoikeudellinen omistaja, julkaisen tämän teoksen public domainiin eli luovun kaikista tekijänoikeuksista lain sallimissa puitteissa. Tämä on voimassa maailmanlaajuisesti.
Joissain maissa laki ei mahdollista tätä. Mikäli näin on:
Myönnän kenelle tahansa oikeuden käyttää tätä teosta mihin tahansa tarkoitukseen, ilman mitään ehtoja, ellei laki vaadi ehtojen asettamista.

Source code (MATLAB)

function main()

% prepare the screen
   figure(1); clf; hold on; axis equal;  axis off; 
   linewidth=2; fs= 30;

   N = 11;
   a = -2; b = N+a-1;
   blue = [0, 0, 1];
   red = [1, 0, 0];
   gray=[0.7, 0.7, 1.0];
   white = 0.99*[1, 1, 1];
   lightblue=[176, 196,222]/256;
   green = [0, 200,  70]/256;
   color1 = gray;
   color2 = green;

   XX = linspace(a, b, N); YY = XX;
   [X, Y] = meshgrid(XX, YY);

   factor = 4; shift = 3.6;
   x=factor*[0, 0.7, 0.5 1, 0]+shift; y=factor*[0, 0, 0.5, 1 0.8];
   do_plot(x, y, X, Y, linewidth, color1);

   theta=1.4*pi/4; A=[cos(theta) -sin(theta); sin(theta) cos(theta)];
   for i=1:N
	  for j=1:N
		 v= A*[X(i, j); Y(i, j)]; X(i, j)=v(1); Y(i, j)=v(2);
	  end
   end
   for i=1:length(x)
	  v= A*[x(i); y(i)]; x(i)=v(1); y(i)=v(2); 
   end

   do_plot(x, y, X, Y, linewidth, color2);

% plot the point around which the rotation takes place
   ball_radius = 0.15;
   ball(0, 0, ball_radius, red);
   text(0, -0.5, '{\it O}', 'color', red, 'fontsize', fs)

% plot the arrow suggesting the rotation
   factor = 4;
   x=factor*1.7; y=factor*2.1; r=sqrt(x^2+y^2); thetas=atan2(y, x);
   thetae=0.7*theta+thetas;
   Theta=thetas:0.01:thetae; X=r*cos(Theta); Y=r*sin(Theta);
   plot(X, Y, 'linewidth', linewidth, 'color', red)
   n=length(Theta);
   arrow([X(n-2), Y(n-2)], [2*X(n)-X(n-1), 2*Y(n)-Y(n-1)], linewidth, 1, 30, linewidth, red)

% plot two invisible points, to bypass a saving bug
   plot(a, 1.5*b, 'color', white); 
   plot(a, -0.5*b, 'color', white); 

% save to eps and to svg
%saveas(gcf, 'rotation_illustration2.eps', 'psc2') 
   plot2svg('rotation_illustration2.svg')

function do_plot(x, y, X, Y, linewidth, color)
   n=length(x); 
   P=5; Q=n+2*P+1; % P will denote the amount of overlap

% 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 pieces
   start=N*(P-1)+1;
   stop=N*(n+P-1)+1;
   xx=xx(start:stop); 
   yy=yy(start:stop);

   H=fill(xx, yy, color);

   set(H, 'linewidth', 1, 'edgecolor', color);

   [M, N]= size(X);
   for i=1:N
	  plot([X(1, i), X(N, i)], [Y(1, i), Y(N, i)], 'linewidth', linewidth, 'color', color)
	  plot([X(i, 1), X(i, N)], [Y(i, 1), Y(i, N)], 'linewidth', linewidth, 'color', color)
   end

% plot some balls, avoid artifacts at the corners
   small_rad=0.045;
   ball(X(1, 1), Y(1, 1), small_rad, color)
   ball(X(1, N), Y(1, N), small_rad, color)
   ball(X(N, 1), Y(N, 1), small_rad, color)
   ball(X(N, N), Y(N, N), small_rad, color)

function arrow(start, stop, th, arrow_size, sharpness, arrow_type, color)
   
% Function arguments:
% start, stop:  start and end coordinates of arrow, vectors of size 2
% th:           thickness of arrow stick
% arrow_size:   the size of the two sides of the angle in this picture ->
% sharpness:    angle between the arrow stick and arrow side, in degrees
% arrow_type:   1 for filled arrow, otherwise the arrow will be just two segments
% color:        arrow color, a vector of length three with values in [0, 1]
   
% convert to complex numbers
   i=sqrt(-1);
   start=start(1)+i*start(2); stop=stop(1)+i*stop(2);
   rotate_angle=exp(i*pi*sharpness/180);

% points making up the arrow tip (besides the "stop" point)
   point1 = stop - (arrow_size*rotate_angle)*(stop-start)/abs(stop-start);
   point2 = stop - (arrow_size/rotate_angle)*(stop-start)/abs(stop-start);

   if arrow_type==1 % filled arrow

% plot the stick, but not till the end, looks bad
      t=0.5*arrow_size*cos(pi*sharpness/180)/abs(stop-start); stop1=t*start+(1-t)*stop;
      plot(real([start, stop1]), imag([start, stop1]), 'LineWidth', th, 'Color', color);

% fill the arrow
      H=fill(real([stop, point1, point2]), imag([stop, point1, point2]), color);
      set(H, 'EdgeColor', 'none')
      
   else % two-segment arrow
      plot(real([start, stop]), imag([start, stop]),   'LineWidth', th, 'Color', color); 
      plot(real([point1, stop, point2]), imag([point1, stop, point2]), 'LineWidth', th, 'Color', color);
   end

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);

Kuvatekstit

Lisää yhden rivin pituinen kuvaus tästä tiedostosta

Kohteet, joita tässä tiedostossa esitetään

esittää

9. kesäkuu 2007

image/svg+xml

Tiedoston historia

Päiväystä napsauttamalla näet, millainen tiedosto oli kyseisellä hetkellä.

(uusimmat | vanhimmat) Näytä [10 | 20 | 50 | 100 | 250 | 500] kerralla. ← 10 uudempaa |
PäiväysPienoiskuvaKokoKäyttäjäKommentti
nykyinen8. joulukuuta 2019 kello 12.57Pienoiskuva 8. joulukuuta 2019 kello 12.57 tallennetusta versiosta1 005 × 897 (12 KiB)Andrew Pertsevfont «O»
8. joulukuuta 2019 kello 12.52Pienoiskuva 8. joulukuuta 2019 kello 12.52 tallennetusta versiosta1 005 × 897 (12 KiB)Andrew Pertsevcolor
8. joulukuuta 2019 kello 12.45Pienoiskuva 8. joulukuuta 2019 kello 12.45 tallennetusta versiosta1 005 × 897 (12 KiB)Andrew Pertsevclean, add param, file size
6. joulukuuta 2019 kello 13.16Pienoiskuva 6. joulukuuta 2019 kello 13.16 tallennetusta versiosta1 005 × 897 (19 KiB)Andrew Pertsevcrop corr
6. joulukuuta 2019 kello 13.14Pienoiskuva 6. joulukuuta 2019 kello 13.14 tallennetusta versiosta980 × 859 (19 KiB)Andrew Pertsevcrop
6. joulukuuta 2019 kello 13.08Pienoiskuva 6. joulukuuta 2019 kello 13.08 tallennetusta versiosta930 × 859 (19 KiB)Andrew Pertsevdownload error correction
6. joulukuuta 2019 kello 12.52Pienoiskuva 6. joulukuuta 2019 kello 12.52 tallennetusta versiosta930 × 847 (20 KiB)Andrew Pertsevsvg optimization file size, arrow corrrction
11. kesäkuuta 2007 kello 06.36Pienoiskuva 11. kesäkuuta 2007 kello 06.36 tallennetusta versiosta875 × 758 (47 KiB)Oleg Alexandrovtweak
10. kesäkuuta 2007 kello 08.24Pienoiskuva 10. kesäkuuta 2007 kello 08.24 tallennetusta versiosta875 × 758 (47 KiB)Oleg AlexandrovTweak.
9. kesäkuuta 2007 kello 08.55Pienoiskuva 9. kesäkuuta 2007 kello 08.55 tallennetusta versiosta875 × 874 (40 KiB)Oleg Alexandrovtweak
(uusimmat | vanhimmat) Näytä [10 | 20 | 50 | 100 | 250 | 500] kerralla. ← 10 uudempaa |

Seuraava sivu käyttää tätä tiedostoa:

Tiedoston järjestelmänlaajuinen käyttö

Seuraavat muut wikit käyttävät tätä tiedostoa:

Metatieto