private void _NacrtajStupac(float v, int x, int sirina) { float velicinaStupca = Math.Abs(v) / AbsMax * (Baza - MinY); int y = (int)(v > 0 ? Baza - velicinaStupca:Baza); int visina = (int)Math.Abs(velicinaStupca); GrafickiObjekt.FillRectangle(new SolidBrush(Color.Blue), x, y, sirina, visina); }
//===================================================================== private void _NacrtajGrafikon() { int sirinaTocke = (SirinaOkvira - (LijevaMargina + MARGINA_KOORDINATA + 10)) / Vrijednosti.Count - _RAZMAK; int pozicija = LijevaMargina + MARGINA_KOORDINATA + 10 + (sirinaTocke / 2); for (int i = 0; i < Vrijednosti.Count - 1; i++) { float v1 = Vrijednosti[i].Item1; float v2 = Vrijednosti[i + 1].Item1; float visinaTocke1 = Math.Abs(v1) / AbsMax * (Baza - MinY); float visinaTocke2 = Math.Abs(v2) / AbsMax * (Baza - MinY); float x1 = pozicija; float y1 = 0; float x2 = pozicija + sirinaTocke + _RAZMAK; float y2 = 0; if (v1 >= 0 && v2 >= 0) { y1 = Baza - visinaTocke1; y2 = Baza - visinaTocke2; } else if (v1 >= 0 && v2 < 0) { y1 = Baza - visinaTocke1; y2 = Baza + visinaTocke2; } else if (v1 < 0 && v2 >= 0) { y1 = Baza + visinaTocke1; y2 = Baza - visinaTocke2; } else if (v1 < 0 && v2 < 0) { y1 = Baza + visinaTocke1; y2 = Baza + visinaTocke2; } GrafickiObjekt.FillRectangle(new SolidBrush(Color.Green), (int)x1 - 4, (int)y1 - 4, 8, 8); GrafickiObjekt.FillRectangle(new SolidBrush(Color.Green), (int)x2 - 4, (int)y2 - 4, 8, 8); GrafickiObjekt.DrawLine(new Pen(Color.Blue, 2), (int)x1, (int)y1, (int)x2, (int)y2); pozicija += sirinaTocke + _RAZMAK; } }
private void _NacrtajKoordinate() { _IzracunajBazu(); // za isprekidanu crtu Pen pen = new Pen(Color.Red, 1); float[] tekstura = { 2, 4 }; // 2 tocke, 4 prazno, 2 tocke, 4 prazno, ... pen.DashPattern = tekstura; // x-koordinata GrafickiObjekt.DrawLine(new Pen(Color.Black, 2), LijevaMargina + MARGINA_KOORDINATA, Baza, SirinaOkvira, // ovo je x2, ne duljina crte (kao kod sirine pravokutnika) Baza); // y-koordinata GrafickiObjekt.DrawLine(new Pen(Color.Black, 2), LijevaMargina + MARGINA_KOORDINATA, MinY, LijevaMargina + MARGINA_KOORDINATA, Baza); float korak = (Baza - MinY) / 10; // podijeli y-koordinatu na 10 dijelova float vrijednostSkale = 0; float korakSkale = AbsMax / 10; // najveca apsolutna vrijednost / 10 float y = Baza + 1; // +1 da ne ode iznad najvise tocke (vjerojatno ovisi i o debljini crte) while (y > MinY) { // crtica pored vrijednosti skale GrafickiObjekt.DrawLine(new Pen(Color.Black, 2), LijevaMargina + MARGINA_KOORDINATA - 10, y, LijevaMargina + MARGINA_KOORDINATA, y); // tanka linija na razini vrijednosti GrafickiObjekt.DrawLine(pen, LijevaMargina + MARGINA_KOORDINATA, y, SirinaOkvira, y); GrafickiObjekt.DrawString(Math.Round(vrijednostSkale, 1).ToString(), new Font(FontFamily.GenericSerif, 10), new SolidBrush(Color.Blue), new PointF(LijevaMargina + MARGINA_K_BROJEVA, y)); y -= korak; vrijednostSkale += korakSkale; } if (Min < 0) { // y-koordinata ispod baze GrafickiObjekt.DrawLine(new Pen(Color.Black, 2), LijevaMargina + MARGINA_KOORDINATA, Baza, LijevaMargina + MARGINA_KOORDINATA, Baza + (Baza - MinY)); // 0 je vec nacrtana pa pocinjemo od sljedeceg koraka vrijednostSkale = korakSkale; y = Baza - 1 + korak; // -1 iz istog razloga kao i +1 gore while (y < Baza + (Baza - MinY)) { // crtica pored vrijednosti skale GrafickiObjekt.DrawLine(new Pen(Color.Black, 2), LijevaMargina + MARGINA_KOORDINATA - 10, y, LijevaMargina + MARGINA_KOORDINATA, y); // tanka linija na razini vrijednosti GrafickiObjekt.DrawLine(pen, LijevaMargina + MARGINA_KOORDINATA, y, SirinaOkvira, y); GrafickiObjekt.DrawString(Math.Round(-vrijednostSkale, 1).ToString(), new Font(FontFamily.GenericSerif, 10), new SolidBrush(Color.Blue), new PointF(LijevaMargina + MARGINA_K_BROJEVA, y)); y += korak; vrijednostSkale += korakSkale; } } }