ASP.NET'te Trigonometrik Fonksiyon Çizimleri
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.
#sin #cos #tan #grafik #derece #radyan #png #mime #content #types


