def x(t) # абсциса точки графіка t # для графіка функції # Math.cos(5*t) # фігура Ліссажу end def y(t) # ордината точки графіка #t/2+0.75 # лінійна функція #t*t/4+t/3-0.25 # квадратична функція if !(t==0.5) # раціональна функція return (t/8+0.0625)/(2*t-1) else return 0 end # Math.sin(7*t) # фігура Ліссажу end def defined (t) # належність області визначення !(t==0.5) # для раціональної # true # в усіх інших випадках end nx=600 # розмір зображення по горизонталі ny=600 # розмір зображення по вертикалі nj=1000 # кількість ланок ламаної - наближення графіка t0=-10 # найменше значення аргумента t1=10 # найбільше значення аргумента x0=-1 # найменше значення абсциси на рисунку x1= 1 # найбільше значення абсциси на рисунку y0=-1 # найменше значення ординати на рисунку y1= 1 # найбільше значення ординати на рисунку dx=x1-x0 # приріст абсциси на рисунку dy=y1-y0 # прирiст ординати на рисунку dt=(t1-t0).to_f/nj.to_f # прирiст аргумента між вершинами ламаної txx=10 # зсув підпису x по горизонталі від краю рисунка txy=15 # зсув підпису x по вертикалі від осі абсцис tyx=15 # зсув підпису y по горизонталі від осі ординат tyy=10 # зсув підпису y по вертикалі від краю рисунка ax=3 # половина розміру по горизонталі стрілки на осі ординат ay=8 # половина розміру по вертикалі стрілки на осі абсцис f = File.new("picture.svg","w") # відкриття файлу на запис f.puts('') # запис розмірів if (x0<0) && (0') # зображення осі ординат ixp=((0-x0)*nx/dx-ax).to_i.to_s iyp=ay.to_i.to_s f.puts('') # ліва частина стрілки ixp=((0-x0)*nx/dx+ax).to_i.to_s f.puts('') # права частина стрілки ix=((0-x0)*nx/dx-tyx).to_i.to_s iy=tyy.to_s f.puts('y') # підпис осі ординат end if (y0<0) && (0') # зображення осі абсцис ixp=(nx-ay).to_i.to_s iyp=((y1-0)*ny/dy-ax).to_i.to_s f.puts('') # верхня частина стрілки iyp=((y1-0)*ny/dy+ax).to_i.to_s f.puts('') # нихня частина стрілки iy=((y1-0)*ny/dy+txy).to_i.to_s ix=(nx-txy).to_s f.puts('x') # підпис осі абсцис end ixp=((x(t0)-x0)*nx/dx).to_i.to_s iyp=((y1-y(t0))*ny/dy).to_i.to_s tp=t0 for j in 0...nj t=t0+j*dt ix=((x(t)-x0)*nx/dx).to_i.to_s iy=((y1-y(t))*ny/dy).to_i.to_s if defined(t) && defined(tp) f.puts('') # Зображення (j+1)-ої ланки ламаної end tp=t ixp=ix iyp=iy end f.puts('') f.close