using System; using System.IO; using System.Reflection; using System.Runtime.InteropServices; using Cairo; using Gtk; public class Example { static void Main () { Application.Init (); Gtk.Window w = new Gtk.Window ("Графік функції"); w.Resize (600, 600); DrawingArea a = new CairoGraphic (); Box box = new HBox (true, 0); box.Add (a); w.Add (box); w.DeleteEvent += close_window; w.ShowAll (); Application.Run (); } static void close_window (object obj, DeleteEventArgs args) { Application.Quit (); } } public class CairoGraphic : DrawingArea { double x (double t) { return t; //return Math.Cos(5*t); // зняти коментар фіґур Ліссажу - див. зображення 4 } bool defined (double t) { // return (t != 0.5); // зняти коментар для дробно-лінійної функції return true; } double y (double t) { // if (defined(t)) return (t/8+0.0625)/(2*t-1); return t/2+0.75; //return t*t/4+t/3-0.25; //return Math.Sin(7*t); // зняти коментар фіґур Ліссажу - див. зображення 4 } protected override bool OnExposeEvent (Gdk.EventExpose args) { using (Context g = Gdk.CairoHelper.Create (args.Window)) { double nx=600, // розмір зображення по горизонталі ny=600, // розмір зображення по вертикалі nj=2000, // кількість ланок ламаної - наближення графіка txx=10, // зсув підпису x по горизонталі від краю рисунка txy=15, // зсув підпису x по вертикалі від осі абсцис tyx=15, // зсув підпису y по горизонталі від осі ординат tyy=10, // зсув підпису y по вертикалі від краю рисунка ax=3, // половина розміру по горизонталі стрілки на осі ординат ay=8, // половина розміру по вертикалі стрілки на осі абсцис ix=0, // абсциса поточної точки iy=0, // ордината поточної точки ixp=0, // абсциса попередньої точки iyp=0, // ордината попередньої точки t0=-10, // найменше значення аргумента t1=10, // найбільше значення аргумента t =t0, // поточне значення аргумента tp=t0, // попереднє значення аргумента x0=-1, // найменше значення абсциси на рисунку x1= 1, // найбільше значення абсциси на рисунку y0=-1, // найменше значення ординати на рисунку y1= 1, // найбільше значення ординати на рисунку dx=x1-x0, // приріст абсциси на рисунку dy=y1-y0, // прирiст ординати на рисунку dt=(t1-t0)/nj; // прирiст аргумента між вершинами ламаної g.SetSourceColor(new Color (0, 0, 0, 1)); // колір осей та їхніх підписів g.SelectFontFace ("Times", FontSlant.Italic, FontWeight.Normal); // властивості шрифту g.SetFontSize (18); // розмір шрифту g.LineWidth = 1; // товщина осей if ((x0<0) && (0