ASP.NET'te Trigonometrik Fonksiyon Çizimleri

Gelin, beraber sin, cos, tan fonksiyonlarını çizdirelim

Bu yazımızda sin(x), cos(x) ve tan(x) fonksiyonlarının ASP.NET'te çizilmesini işleyeceğiz.

Tam bu anda kısaca sin (Sinus), cos (Cosinus) ve tan (Tangent) kavramlarından bahsedelim.

Bir dik üçgende, sin = karşı / hipotenüs, cos = komşu / hipotenüs, tan = sin / cos = karşı / komşu (matematiği de katlederek yazdım, artık idare edin... )

Fonksyion tablolarını da yazayım:

Şimdi de grafiklerini vereyim:

Sin(x)
Cos(x)
Tan(x)

Şİmdi sıra bu grafikleri kendi kodlarımızla hazırlamaya geldi:

const int GEN = 1000; // Şeklin genişliği
const int YUK = 300; // Şeklin yüksekliği
const int WYUK = 100; // her bir dalganın max. yuksekliği
const int WGEN = 100000; // ne kadar büyükse o kadar dalga oluşur

Response.ClearContent();
Response.ContentType = "image/png"; // çıktımız PNG resim dosyası formatında

// Grafik çizmek için bu nesnelere ihtiyacımız var
// bunu çalışma alanı,
Bitmap bmp = new Bitmap(GEN, YUK); 
// bunu da ressam olarak algılayabilirsiniz.
Graphics g = Graphics.FromImage(bmp); 

// yatay ve dikey çizgileri oluşturalım
Pen pen = new Pen(Color.Black, 2.0f);
g.DrawLine(pen, new Point(0, 0), new Point(0, YUK));
g.DrawLine(pen, new Point(0, YUK / 2), new Point(GEN, YUK / 2));

// kalemlerimizi tanımlayalım
// grafiklerimizi farklı renklerde çizdireceğiz
Pen penMavi = new Pen(Color.Blue, 2.0f);
Pen penKirmizi = new Pen(Color.Red, 2.0f);
Pen penYesil = new Pen(Color.DarkGreen, 2.0f);

// delegatelerimizi tanımlayalım
// (siz fonksiyonlarımız diyebilirsiniz)
Func<int, int> X = // grafik düzgün görünsün diye..
    x =>
    {
        return x / 2;
    };
Func<int, int> SinY = // SIN fonksiyonu
    x =>
    {
        return YUK / 2 - (int)(WYUK * Math.Sin(x.Deg2Rad()));
    };
Func<int, int> CosY = // COS fonksiyonu
    x =>
    {
        return YUK / 2 - (int)(WYUK * Math.Cos(x.Deg2Rad()));
    };
Func<int, int> TanY = // TAN fonksiyonu
    x =>
    {
        if (x % 90 != 0)
            return YUK / 2 - (int)(WYUK * Math.Tan(x.Deg2Rad()));
        return -1000000;
    };

// Grafiğimizi çizdirelim
for (int i = 0; i < WGEN; i++)
{
    g.DrawEllipse(penMavi, X(i), SinY(i), 1, 1);
    g.DrawEllipse(penKirmizi, X(i), CosY(i), 1, 1);
    g.DrawEllipse(penYesil, X(i), TanY(i), 1, 1);
}

// grafiği çıktı olarak verelim
bmp.Save(Response.OutputStream, ImageFormat.Png);

// nesnelerimizi yok edelim
bmp.Dispose();
g.Dispose();

Delegatelerimizde Deg2Rad adında bir genişletme olduğunu farketmişsinizdir.

Yaptığı iş oldukça basit, Derece cinsinden açıyı Radyana dönüştürüyor:

public static class Methods
{
    public static double Deg2Rad(this int x)
    {
        return (Math.PI * x / 180.0);
    }
}

Sayfayı tarayıcıda görüntülediğinizde şu şekilde bir grafik elde ediyoruz:

Mavi renkli olan Sinus dalgası, kırmızı olan Cosinus dalgası, yeşil olan da Tangant dalgası

Güzel iş, değil mi?

Kodumuzun ilk satırlarında iki satır görüyorsunuz:

Response.ClearContent();
Response.ContentType = "image/png";

Önce html tarafındaki kodlarımızı siliyoruz, ardından çıktımızın formatının resim türünden (PNG formatında) olacağını belirtiyoruz.

Bu da demek oluyor ki, aspx uzantılı dosyalarımız illa ki html formatında output vermek zorunda değilmiş. :)

Kullanabileceğiniz diğer formatlar (MIME types) için http://dalt.in/j8WXy adresine göz atabilirsiniz.

Yukarıdaki kodun tamamını buradan indirebilirsiniz.