also wir haben in der schule einen programmierauftrag bekommen:
wir sollen ein proggie in C# (ms visual c#)schreiben, das lieneare funktionen, quadratische funktionen, funktionen 3. grades, etc. in einem koordinatensystem ausgibt und zB schnittstellen berechnet. mein problem liegt jetzt bei der graphischen darstellung innerhalb einer form. ich suche einen weg diese graphische darstellung möglichst sinnvoll und elegant zu programmieren. im moment mach ich das mit einem pannel, auf das ich alles draufzeichne. aber ich glaube irgendwie ist das keine gute lösung. mein qellcode sieht bisher so aus (vorsicht! für jemanden, der ahnung davon hat, könnte es nach vergewaltigumg von qellcode aussehen
Quellcode
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- namespace WindowsApplication1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- double zoom = 100.0;
- double z = 1.0;
- double t = 0.0;
- Pen blackPen = new Pen(Color.Black, 1);
- Pen rasterPen = new Pen(Color.LightBlue, 1);
- Font drawFont = new Font("Arial", 8);
- SolidBrush drawBrush = new SolidBrush(Color.Black);
- public void drawit()
- {
- panel1.Refresh();
- Graphics graph = panel1.CreateGraphics();
- int hw = panel1.Width / 2;
- int hh = panel1.Height / 2;
- graph.TranslateTransform(hw, hh);
- #region achseneinteilung und raster
- //x-achse negativ
- for (double i = zoom; i >= -hw; i -= zoom)
- {
- int i_int = System.Convert.ToInt32(i);
- graph.DrawLine(blackPen, i_int, 0, i_int, 5);
- graph.DrawString(System.Convert.ToString(i / zoom * z), drawFont, drawBrush, i_int, 8);
- }
- //x-achse positiv
- for (double i = zoom; i <= hw; i += zoom)
- {
- int i_int = System.Convert.ToInt32(i);
- graph.DrawLine(blackPen, i_int, 0, i_int, 5);
- graph.DrawString(System.Convert.ToString(i / zoom * z), drawFont, drawBrush, i_int, 8);
- }
- //y-achse negativ
- for (double i = zoom; i <= hh; i += zoom)
- {
- int i_int = System.Convert.ToInt32(i);
- graph.DrawLine(blackPen, 0, i_int, 5, i_int);
- graph.DrawString(System.Convert.ToString(i / zoom * -z), drawFont, drawBrush, 8, i_int);
- }
- //y-achse positiv
- for (double i = zoom; i >= -hh; i -= zoom)
- {
- int i_int = System.Convert.ToInt32(i);
- graph.DrawLine(blackPen, 0, i_int, 5, i_int);
- graph.DrawString(System.Convert.ToString(i / zoom * -z), drawFont, drawBrush, 8, i_int);
- }
- #endregion
- //x- und y-achse einzeichnen
- graph.DrawLine(blackPen, hw, 0, -hw, 0);
- graph.DrawLine(blackPen, 0, hh, 0, -hh);
- }
- private void panel1_SizeChanged(object sender, EventArgs e)
- {
- drawit();
- }
- private void Form1_Activated(object sender, EventArgs e)
- {
- drawit();
- }
- private void sb_zoom_ValueChanged(object sender, EventArgs e)
- {
- if (sb_zoom.Value > t)
- {
- zoom += 2.0;
- if (zoom == 200.0)
- {
- z *= 0.5;
- zoom = 100.0;
- }
- }
- else
- {
- zoom -= 2.0;
- if (zoom == 100.0)
- {
- z *= 2.0;
- zoom = 200.0;
- }
- }
- label1.Text = System.Convert.ToString(sb_zoom.Value);
- label2.Text = System.Convert.ToString(zoom);
- t = sb_zoom.Value;
- drawit();
- }
- }
- }
also eigentlich brauch ich nur einen ansatz. könnte mich dann da auch selbsts weiter reinlesen/probieren. wie setzt man sowas am besten um?
greetz PferdAmHerd