PDA

View Full Version : نوشتن یک تابع گرافیگی



NIMA_1981
شنبه 07 خرداد 1390, 22:47 عصر
سلام دوستان من با استفاده از کد زیر یک شکل بیضی رو رسم میکنم


void


drawRotateEllipse(int centerx, int centery, int width, int height, double angle, int clr) {



const double PI = 3.14159265358979323846;



int steps = 172;



double beta = -angle * (PI / 180);



double sinbeta = Math.Sin(beta);



double cosbeta = Math.Cos(beta);



for (int i = 0; i < 360; i += 360 / steps)

{





double alpha = i * (PI / 180);



double sinalpha = Math.Sin(alpha);



double cosalpha = Math.Cos(alpha);



double X = centerx + (width * cosalpha * cosbeta - height * sinalpha * sinbeta);



double Y = centery + (width * cosalpha * sinbeta + height * sinalpha * cosbeta);



m.SetPixel((

int)X,(int)Y,Color.Red);

} }

}



http://up.iran-ps.com/images/875biz.jpg

کد بالا با قرار دادن یک سری نقطه کنار هم شکل بیضی رو میکشه حالا من می خوام این بیضی رو تو پر بکشم یعنی fill بشه مثل این شکل میشه یک راه پیشنهاد کنید که باید چطوری الگوریتم را بنویسم
http://www.c-sharpcorner.com/UploadFile/mahesh/gdi_plus12092005070041AM/Images/GDITut4BegMCBImg7.gif

با تشکر

یوسف زالی
یک شنبه 08 خرداد 1390, 09:24 صبح
سلام. اگه از توابع پر کننده رنگ استفاده کنی نمی شه؟
fill کنی بعد از اینکه کشیدیش

NIMA_1981
یک شنبه 08 خرداد 1390, 12:20 عصر
ببنید کلا همچین دستور وجود داره که بک بیضی تو پر بکشه با هر رنگی دوست داریم اما من نیمتونم از این دستور ها استفاده کنم یعنی می هوام اون تابع رو خودم درست کنم

saman6384
یک شنبه 08 خرداد 1390, 12:35 عصر
چیزی که به نظر من میاد اینه که شما بیا image ای که توش بیضی رو رسم کردی خط به خط پروسس کن از بالا به پایین
پیکسلهای رنگی اول و آخر هر خط رو در بیار و پیکسلهایه بینشونم رنگی کن!

یوسف زالی
یک شنبه 08 خرداد 1390, 13:21 عصر
این طوری که وحشتناک کند می شه

NIMA_1981
یک شنبه 08 خرداد 1390, 14:21 عصر
به این روش نمیشه چون تو صفحه شکل های دیگه هم قرار داره بعد این کار عملا غیر ممکنه و یا اگه ممکن باشه درست نیست -من 2 تا نقطه دارم حطوری میشه دور این دو تا نقطه یک خط بکشم و توشو رنگی کنم

یوسف زالی
یک شنبه 08 خرداد 1390, 14:27 عصر
همون موقع که داری نقطه میذاری جاش خط بگذار

NIMA_1981
یک شنبه 08 خرداد 1390, 14:57 عصر
برای ایجاد یک پاره خط به دو نقطه احتیاج من در هر لحظه 1 نقطه دارم

یوسف زالی
دوشنبه 09 خرداد 1390, 15:12 عصر
مختصات نقطه اول رو بذار تو متغیر first, Last.
از نقطه دوم به بعد وصل کن به last و دومی رو بذار تو last تا آخری.
آخری رو هم به first وصل کن.

exlord
دوشنبه 09 خرداد 1390, 18:02 عصر
چرا از توابع خود C# برا اینکار استفاده نمیکنین ؟

private void Form2_Paint(object sender, PaintEventArgs e)
{
Rectangle beysi = new Rectangle(100, 100, 300, 100);
e.Graphics.TranslateTransform(beysi.Width - beysi.X / 2, beysi.Height - beysi.Y / 2);
e.Graphics.RotateTransform(45.0f);
e.Graphics.FillEllipse(Brushes.Blue, beysi);
}

اینم کد خودت ...

GraphicsPath path = new GraphicsPath();//<---------------------
int steps = 172;
double beta = -angle * (Math.PI / 180);
double sinbeta = Math.Sin(beta);
double cosbeta = Math.Cos(beta);
for (int i = 0; i < 360; i += 360 / steps)
{
double alpha = i * (Math.PI / 180);
double sinalpha = Math.Sin(alpha);
double cosalpha = Math.Cos(alpha);
double X = centerx + (width * cosalpha * cosbeta - height * sinalpha * sinbeta);
double Y = centery + (width * cosalpha * sinbeta + height * sinalpha * cosbeta);
m.SetPixel((int)X, (int)Y, Color.Red);
path.AddLines(new Point[] { new Point((int)X, (int)Y) });//<---------------------
}
Graphics.FromImage(m).FillPath(Brushes.Blue, path);//<---------------------

saman6384
دوشنبه 09 خرداد 1390, 20:11 عصر
برای ایجاد یک پاره خط به دو نقطه احتیاج من در هر لحظه 1 نقطه دارم

خوب یه نقطه میشه نقطه روی محیط
یه نقطه میشه وسط بیضی