PDA

View Full Version : سوال: دقت داده ها از نوع double در رسم گرافیک



مجتبی جوادی
شنبه 30 آذر 1398, 16:39 عصر
دوستان و استادان گرامی درود
چطور میشه برای ورودی متدهای pixtureBox از داده های double استفاده کرد؟ برای نمونه میخوام برای کشیدن خط از double بجای int یا float استفاده کنم. اگه با یک نمونه کد راهنمایی کنید سپاسگزار میشم.

با سپاس فراوان

the king
شنبه 30 آذر 1398, 17:16 عصر
دوستان و استادان گرامی درود
چطور میشه برای ورودی متدهای pixtureBox از داده های double استفاده کرد؟ برای نمونه میخوام برای کشیدن خط از double بجای int یا float استفاده کنم. اگه با یک نمونه کد راهنمایی کنید سپاسگزار میشم.

با سپاس فراوان
شما داده های double تون رو با پیشوند (float) تبدیل explicit casting کنید تا float بشه، چیزی هم در ترسیم از دست نمی دهید، تاثیر بدی نداره.
مهم نیست که ورودی از double به float تبدیل شده باشه یا از اول float بوده باشه چون وقتی double بودن تاثیری میذاره که موتور گرافیکی در بخش داخلی از این دقت استفاده کنه و اون دقت اضافی نقشی در محاسبات و پردازش +GDI داشته باشه.
پردازش داخلی +GDI در بهترین حالت بر اساس ورودی اعشاری float ئه، برای همین اینکه داده اولیه از double بیاد کمکی نمی کنه چون نهایتا تبدیل میشه به float
اگر به فرض Point و Size و Rectangle ای از نوع double هم وجود می داشت ترسیم Graphics مشابه float از آب درمیومد.

مجتبی جوادی
سه شنبه 03 دی 1398, 02:22 صبح
دور.د دوست گرامی
مشکل اینه که وقتی float میشه به همراه ممیز فقط هشت کاراکتر باقی میمونه برای نمونه 4325485/64564 وقتی float بشه به 4325485 تبدیل میشه و این مشکل بزرگیه. اگه بشه راهی پیدا کرد از double توی تمام ورودی های گرافیکی استفاده کرد خیلی عالی میشه
با سپاس از شما

the king
سه شنبه 03 دی 1398, 12:01 عصر
دور.د دوست گرامی
مشکل اینه که وقتی float میشه به همراه ممیز فقط هشت کاراکتر باقی میمونه برای نمونه 4325485/64564 وقتی float بشه به 4325485 تبدیل میشه و این مشکل بزرگیه. اگه بشه راهی پیدا کرد از double توی تمام ورودی های گرافیکی استفاده کرد خیلی عالی میشه
با سپاس از شما
متوجه میشم چی میگید، اما اون 4325485.64564 مقدار زیادی بزرگی نیست؟ با 1200DPI میشه تقریبا 3604 اینچ یا 91 متر.

مجتبی جوادی
سه شنبه 03 دی 1398, 13:10 عصر
آره شما درست می فرمایید ولی خواستم فقط مثال بزنم. حالا واقعا میشه راهکاری پیدا کرد که بتونیم از double استفاده کنیم؟

the king
سه شنبه 03 دی 1398, 14:13 عصر
آره شما درست می فرمایید ولی خواستم فقط مثال بزنم. حالا واقعا میشه راهکاری پیدا کرد که بتونیم از double استفاده کنیم؟

بر اساس Graphics و +GDI که قطعا نه، شما هر زمانی که بخواهید رسم رو انجام بدید ناچارا تبدیل میشه به float.
حتی در DirectX و OpenGL که در مقایسه با +GDI داخل NET. خیلی پیشرفته هستند هم صرفا برخی درایور ها از دقت double پشتیبانی می کنند، نه همه شون.
البته اگر هم همچین کتابخانه ای بکار ببرید که ورودی double بگیره باز هم در رسم تاثیرش مشخص نمیشه، چون حافظه گرافیکی که واقعا اونقدر ظرفیت نداره که دقت double بکارش بیاد و قطعا دارید روی حافظه گرافیکی کوچکی رسمش می کنید که جزئیات از دست میره.