1/2 सर्कल (पीआई) प्राप्त करने के लिए, केवल अपने सेट पिक्सेल रूटीन में से एक को कॉल करें। 30 डिग्री घूर्णन करने के लिए अपने चाप को कुछ ट्रिगर की आवश्यकता होती है। जब तक आपका एक्स/वाई अनुपात तन (30 डिग्री) के बराबर न हो, तब तक आप उपरोक्त लूप को चला सकते हैं, फिर वास्तव में तब तक ड्राइंग शुरू करें जब तक कि आपका अनुपात उस मूल्य को हिट न करे जब आप रोकना चाहते हैं। सबसे कुशल तरीका नहीं है, लेकिन यह काम करेगा। इसे बेहतर बनाने के लिए, आपको अपने शुरुआती 4 var मानों की पूर्व-गणना करने की आवश्यकता होगी। आप उपरोक्त रन से मूल्य ले सकते हैं और उन्हें प्रारंभिक मानों के रूप में प्लग कर सकते हैं और यह बहुत ही कुशल होगा।
क्या आपको उपरोक्त एल्गोरिदम Michael Abrash's Black Book सामान से मिला है? यदि नहीं, तो मैं इसके लिए तेजी से सर्कल/आर्क ड्राइंग पर संदर्भ के दूसरे बिंदु के रूप में Google के लिए Google होगा।
ठीक है, हां, चिपकने वाले लंबवत को वहां शामिल नहीं किया गया था। यहाँ कुछ मैं वेब Abrash से होने का दावा है कि पर पाया गया है:
/* One of Abrash's ellipse algorithms */
void draw_ellipse(int x, int y, int a, int b, int color)
{
int wx, wy;
int thresh;
int asq = a * a;
int bsq = b * b;
int xa, ya;
draw_pixel(x, y+b, color);
draw_pixel(x, y-b, color);
wx = 0;
wy = b;
xa = 0;
ya = asq * 2 * b;
thresh = asq/4 - asq * b;
for (;;) {
thresh += xa + bsq;
if (thresh >= 0) {
ya -= asq * 2;
thresh -= ya;
wy--;
}
xa += bsq * 2;
wx++;
if (xa >= ya)
break;
draw_pixel(x+wx, y-wy, color);
draw_pixel(x-wx, y-wy, color);
draw_pixel(x+wx, y+wy, color);
draw_pixel(x-wx, y+wy, color);
}
draw_pixel(x+a, y, color);
draw_pixel(x-a, y, color);
wx = a;
wy = 0;
xa = bsq * 2 * a;
ya = 0;
thresh = bsq/4 - bsq * a;
for (;;) {
thresh += ya + asq;
if (thresh >= 0) {
xa -= bsq * 2;
thresh = thresh - xa;
wx--;
}
ya += asq * 2;
wy++;
if (ya > xa)
break;
draw_pixel(x+wx, y-wy, color);
draw_pixel(x-wx, y-wy, color);
draw_pixel(x+wx, y+wy, color);
draw_pixel(x-wx, y+wy, color);
}
}
विचार किया जा रहा आप एक समय x4 पर वृत्त के एक 8 वीं आकर्षित और फिर तैयार की अन्य 8ths पाने के लिए फ्लिप। फिर भी आपके प्रश्न का सीधे उत्तर नहीं देते हैं। उस पर काम कर रहे हैं ...
फिर से, ऊपर दिए गए आपके कोड को काम करना चाहिए, आपको केवल शुरुआती और समापन स्थितियों को ध्यान से नियंत्रित करने की आवश्यकता है। Y> = 0 को आपकी 'आर्क' लंबाई को समाप्त करने के बाद जो भी हो, वह बनने की आवश्यकता है और शुरुआती मानों को आपके चाप की शुरुआत के रूप में गणना करने की आवश्यकता है।
यह चीजों के साथ सीधे आगे काम नहीं करेगा। इसके बजाय एक फ्लोटिंग पॉइंट दिनचर्या का उपयोग करना आसान हो सकता है। गणित बहुत अधिक आगे है और प्रोसेसर अब इन्हें बेहतर तरीके से संभालने के लिए प्रवृत्त होते हैं जब इन पूर्णांक दिनचर्या तैयार की जाती हैं।
धन्यवाद, मैंने सोचा कि हमें समीकरण बदलना चाहिए, लेकिन मेरा संस्करण काम नहीं करता है। क्या आप उदाहरण दे सकते हैं? और यह माइकल एब्राश की ब्लैक बुक से नहीं है। – PePe
हां, यह ग्राफिक्स प्रोग्रामिंग पुस्तक से ब्लैक बुक में शामिल अध्याय में नहीं था। मुझे पढ़ना याद आया और माना कि यह संकलन संस्करण में होगा। इसके लिए नेट पर चारों ओर खुदाई ... –
धन्यवाद, लेकिन मैं ब्रेसनहेम के एल्गोरिदम का उपयोग करना पसंद करता हूं। – PePe