Laden...

Sinuskurfe zeichnen

Erstellt von Chris_3 vor 17 Jahren Letzter Beitrag vor 17 Jahren 5.115 Views
C
Chris_3 Themenstarter:in
2 Beiträge seit 2006
vor 17 Jahren
Sinuskurfe zeichnen

hi@all, finde das forum klasse!

ich hab folgende frage:
ich hab als aufgabe eine sinusfunktion zu zeichen bekommen, aber bei mir wird diese funktion immer extremst kantig und ungenau, jetzt wollte ich euch bitten mir zu helfen, danke!


public partial class MainForm
	{
		double TransfY(double x1)
			{
			double e= ClientSize.Width/(Math.PI*4);
			double x=0;
			x= e*x1;
			return(x);
			}
		double TransfX(double x1)
			{
			
			double x=0;
			x=ClientSize.Height/2 - (Math.Sin(x1)*50);
			listBox.Items.Add(x);
			return(x);
			}
		
-------------------

		void Button1Click(object sender, System.EventArgs e)
		{
		listBox.Items.Clear();
		double x1=0;
		double x2=0;
		//int y= ClientSize.Height/2;
		
			System.Drawing.Graphics ZF = this.CreateGraphics();
			System.Drawing.Pen Pen = new System.Drawing.Pen(System.Drawing.Color.Red);
			ZF.DrawLine(Pen, 0, System.Convert.ToInt32(TransfX(0)), ClientSize.Width, System.Convert.ToInt32(TransfX(0)));
			
			for(int i=0; i<=360; i=i+1)
			{
				
				x2=i;
				/*if (i==0){
				x1=TransfY(x2);
				}*/

				ZF.DrawLine(Pen, System.Convert.ToInt32(TransfY(x1)), System.Convert.ToInt32(TransfX(x1)), System.Convert.ToInt32(TransfY(x2)),System.Convert.ToInt32(TransfX(x2)));
				
				
				x1=x2;
				
			}
				
		}
	}

danke im vorraus

lg chris

6.862 Beiträge seit 2003
vor 17 Jahren

Ehrlich gesagt ich hab nicht mal versucht deinen Code zu verstehen, denke du machst dir das viel zu kompliziert 🙂

Probier mal das hier:


private void button1_Click(object sender, EventArgs e) {

            System.Drawing.Graphics ZF = this.CreateGraphics();
            System.Drawing.Pen Pen = new System.Drawing.Pen(System.Drawing.Color.Red);

            for (double i = 0; i < 360 + double.Epsilon; i++) {
                ZF.DrawRectangle(Pen, (float)i, (float)(70f*Math.Sin(Math.PI * i / 180.0)+100f), 1f, 1f);
            }
        }

Du willst ja nur einzelne Punkte jeweils zeichnen, da eignet sich die DrawRectangle Funktion besser. Du gibst einfach als Größe des Rechtecks 1,1 an und dann wird nur nen einzelner Pixel gezeichnet. Der zweite große Fehler in deinem Code war die falsche Anwendung der Sinusfunktion. Die arbeitet im Bogenmaß, nicht im Gradmaß, wenn du von 0-360° zählst, musst du jeweils ins Bogenmaß umrechnen.
In X-Richtung kannst du ja einfach deine Zählvariable benutzen, und in y-Richtung muss man halt bissle tricksen. Die 70f ist nen Skalierungsfaktor dass die Funktion nicht zu klein gerät. Der Sinus liegt ja nunmal nur zwischen -1 und 1 und deshlab würde man ohne den Faktor kaum was sinnvolles sehen. Dann sind da auch noch die +100f drin, und die dienen einfach dazu das ganze gezeichnete um 100 Pixel nach unten zu verschieben, sonst würde man nichts sehen weil die Hälfte oberhalb des Fensters liegt.

Baka wa shinanakya naoranai.

Mein XING Profil.

C
Chris_3 Themenstarter:in
2 Beiträge seit 2006
vor 17 Jahren

danke!
du hast mir echt geholfen!

danke

lg chris

R
21 Beiträge seit 2006
vor 17 Jahren

danke das hat mir geholfen...

mfg hannes