Scan-converting circles using 8-fold symmetry, implicit circle functions, and integer decision variables
25 min read
Created ২ সেপ, ২০২৬
Circle Generation Algorithms & Mathematical Equations (বৃত্ত অঙ্কন অ্যালগরিদম ও গাণিতিক সমীকরণ)
কম্পিউটার গ্রাফিক্স এবং স্ক্যান-কনভার্সনে সোজা লাইন আঁকার চেয়ে বৃত্ত বা বাঁকা শেপ (Curved Shapes) তৈরি করা বেশ জটিল। সোজা লাইনের ক্ষেত্রে সম্পূর্ণ রেখা জুড়ে ঢাল m ধ্রুবক থাকে, কিন্তু বৃত্তের ক্ষেত্রে পরিধি জুড়ে ঢাল ক্রমাগত 0 থেকে ∞ (অসীম) পর্যন্ত পরিবর্তন হতে থাকে।
পিক্সেল গ্রিডে সঠিকভাবে বৃত্ত প্লট করার জন্য প্রথমেই বৃত্তের গাণিতিক রূপ—কার্তেসীয় (Cartesian) এবং পোলার (Polar) সমীকরণ বিশ্লেষণ করা প্রয়োজন।
১. কার্তেসীয় রূপ (Cartesian Form)
মূলবিন্দু (0,0)-এ কেন্দ্র এবং R ব্যাসার্ধবিশিষ্ট বৃত্তের স্ট্যান্ডার্ড কার্তেসীয় সমীকরণ হলো:
x2+y2=R2
যদি বৃত্তের কেন্দ্র যেকোনো স্থানাঙ্ক (xc,yc)-এ অবস্থিত হয়, তবে সমীকরণটি হবে:
(x−xc)2+(y−yc)2=R2
x-এর সাপেক্ষে y-এর মান বের করলে পাই:
y=±R2−(x−xc)2+yc
২. পোলার রূপ (Polar Form)
ত্রিকোণমিতিক প্যারামেট্রিক সমীকরণ ব্যবহার করে (xc,yc) কেন্দ্রে অবস্থিত বৃত্তের পরিধির যেকোনো বিন্দু (x,y)-কে কোণ θ-এর মাধ্যমে প্রকাশ করা যায়:
x=xc+R⋅cosθ
y=yc+R⋅sinθ
এখানে কোণ θ-এর মান 0∘ থেকে 360∘ (0 থেকে 2π রেডিয়ান) পর্যন্ত পরিবর্তিত হয়।
Problems with Direct Circle Drawing Methods (সরাসরি বৃত্ত আঁকার সমস্যাসমূহ)
গাণিতিকভাবে কার্তেসীয় এবং পোলার সমীকরণ সঠিক হলেও কম্পিউটার অ্যালগরিদমে সরাসরি এগুলো ব্যবহার করে বৃত্ত আঁকতে গেলে মারাত্মক পারফরম্যান্স ও গ্রাফিক্যাল সমস্যা দেখা দেয়।
১. ধীরগতির ত্রিকোণমিতিক হিসাব
পোলার সমীকরণে প্রতিটি পিক্সেলের জন্য cosθ ও sinθ-এর মতো ত্রিকোণমিতিক ফাংশন হিসাব করতে হয়। লাইব্রেরি কল বা পাওয়া-সিরিজ ক্যালকুলেশনে ফ্লোটিং-পয়েন্ট অপারেশনের কারণে রিয়েল-টাইম রেন্ডারিং অত্যন্ত ধীর হয়ে পড়ে।
২. ব্যয়বহুল বর্গমূল (Square Root) ও গুণন
কার্তেসীয় সমীকরণ y=R2−x2 ব্যবহার করলে প্রতি ধাপে গুণন (x2), বিয়োগ এবং একটি বর্গমূল (⋅) হিসাব করতে হয়। প্রসেসর হার্ডওয়্যারে বর্গমূলের হিসাব অনেক বেশি ক্লক সাইকেল নষ্ট করে।
৩. অসম পিক্সেল ব্যবধান ও উলম্ব গ্যাপ (Gaps)
বৃত্তের উপরিভাগে (x≈0) x-কে ১ ঘর বাড়ালে y-এর পরিবর্তন খুব ধীরে হয়, ফলে সুন্দর ঘন পিক্সেল পাওয়া যায়। কিন্তু বৃত্তের দু'পাশের উলম্ব অংশে (x≈R) ঢাল dxdy=−yx অত্যন্ত খাড়া (→∞) হয়ে যায়। ফলে x-কে মাত্র ১ ঘর বাড়ালেও y-এর মান লাফিয়ে একাধিক পিক্সেল নিচে নেমে যায়, যা বৃত্তের গায়ে বড় ফাঁকা জায়গা (Gaps) তৈরি করে!
কেন কেবল Step সাইজ বদলে সমাধান সম্ভব নয়?
কার্তেসীয় পদ্ধতিতে ফাঁকা জায়গা ঢাকতে ঢাল ১-এর বেশি হলে (∣m∣>1) x ও y-এর ভূমিকা অদলবদল করার চেষ্টা করা যায়। কিন্তু এটি কোডে জটিল কন্ডিশনাল ব্রাঞ্চিং বাড়ায় এবং ফ্লোটিং-পয়েন্ট বর্গমূলের ধীরগতির সমস্যা দূর করতে পারে না।
বৃত্তের এই গাণিতিক সীমাবদ্ধতা দূর করতে আমরা বৃত্তের জ্যামিতিক ৮-গুণ প্রতিসাম্য (8-Fold Symmetry) সুবিধা ব্যবহার করি।
মাত্র একটি ৪৫° অকট্যান্টে পিক্সেল হিসাব করে ৮-গুণ প্রতিসাম্যের মাধ্যমে বাকি ৭টি অকট্যান্টের মান চিহ্ন পরিবর্তন ও স্থানাঙ্ক অদলবদল করে বের করা যায়।
মাত্র ১ম ৪৫° সেক্টর (অকট্যান্ট ২) গণনা
পুরো ৩৬০° ঘুরার বদলে আমরা কেবল দ্বিতীয় অকট্যান্টে (Octant 2) অবস্থিত ৪৫° চাপের পিক্সেল স্থানাঙ্ক হিসাব করি—যা x=0,y=R বিন্দু থেকে শুরু হয়ে x=y=2R পর্যন্ত বিস্তৃত।
এই একটি প্রাইমারি অকট্যান্টে নির্ণীত প্রতিটি পিক্সেল (x,y)-এর জন্য প্রতিসাম্য ব্যবহার করে একই সাথে বাকি ৭টি অকট্যান্টের পিক্সেল প্লট করা হয়:
মূল বিন্দু (x, y) থেকে প্রাপ্ত ৮টি সমমিত পিক্সেল স্থানাঙ্ক
অকট্যান্ট নম্বর
কোণের পরিসর
সমমিত স্থানাঙ্ক (মূলবিন্দুতে)
অফসেট স্থানাঙ্ক (xc, yc কেন্দ্রে)
অকট্যান্ট ২ (হিসাবকৃত)
45° থেকে 90°
(x, y)
(xc + x, yc + y)
অকট্যান্ট ১
0° থেকে 45°
(y, x)
(xc + y, yc + x)
অকট্যান্ট ৩
90° থেকে 135°
(-x, y)
(xc - x, yc + y)
অকট্যান্ট ৪
135° থেকে 180°
(-y, x)
(xc - y, yc + x)
অকট্যান্ট ৫
180° থেকে 225°
(-x, -y)
(xc - x, yc - y)
অকট্যান্ট ৬
225° থেকে 270°
(-y, -x)
(xc - y, yc - x)
অকট্যান্ট ৭
270° থেকে 315°
(x, -y)
(xc + x, yc - y)
অকট্যান্ট ৮
315° থেকে 360°
(y, -x)
(xc + y, yc - x)
গণনার দক্ষতা বৃদ্ধি
৮-গুণ প্রতিসাম্য ব্যবহারের ফলে অ্যালগরিদমের মূল গাণিতিক হিসাব ৮৭.৫% কমে যায়! আমাদের কেবল x=0 থেকে x≤y হওয়া পর্যন্ত লুপ চালাতে হয়।
Mid-Point Circle Algorithm & Incremental Decision Variable (মিডপয়েন্ট অ্যালগরিদম)
Mid-Point Circle Algorithm (যাকে ব্রেসেনহ্যামের সার্কেল অ্যালগরিদমও বলা হয়) ত্রিকোণমিতি, বর্গমূল এবং ফ্লোটিং-পয়েন্ট সংখ্যা পুরোপুরি বাদ দিয়ে কেবল ইমপ্লিসিট বৃত্তের সমীকরণ ও মিডপয়েন্ট বা মধ্যবিন্দুর অবস্থান পরীক্ষা করে পিক্সেল নির্বাচন করে।
ইমপ্লিসিট সার্কেল ফাংশন (Implicit Circle Function)
মূলবিন্দু (0,0)-এ R ব্যাসার্ধের বৃত্তের ইমপ্লিসিট ফাংশন F(x,y) নিম্নরূপ:
F(x,y)=x2+y2−R2
২ডি সমতলে অবস্থানরত যেকোনো বিন্দু (x,y)-এর জন্য F(x,y)-এর মান ৩টি অবস্থা নির্দেশ করে:
F(x,y)<0: বিন্দুটি বৃত্তের পরিধির ভেতরে অবস্থিত (মূলবিন্দু থেকে দূরত্ব r<R)।
F(x,y)=0: বিন্দুটি বৃত্তের পরিধির সরাসরি ওপর অবস্থিত (মূলবিন্দু থেকে দূরত্ব r=R)।
F(x,y)>0: বিন্দুটি বৃত্তের পরিধির বাইরে অবস্থিত (মূলবিন্দু থেকে দূরত্ব r>R)।
দ্বিতীয় অকট্যান্টে (0≤x≤y) বিন্দুটি (0,R) থেকে ডান-নিচের দিকে অগ্রসর হয়। প্রতি ধাপে x-এর মান ১ বাড়িয়ে (xk+1=xk+1) পরবর্তী পিক্সেল আঁকার সময় y-এর মান হয় একই থাকে, অথবা ১ কমে যায়।
বর্তমান পিক্সেল Pk=(xk,yk) প্লট করার পর পরবর্তী ধাপের জন্য দুটি সম্ভাব্য ক্যান্ডিডেট পিক্সেল থাকে:
১. East (E): (xk+1,yk)
২. South-East (SE): (xk+1,yk−1)
মিডপয়েন্ট M পরীক্ষা
E নাকি SE — কোন পিক্সেলটি বৃত্তের প্রকৃত চাপের বেশি কাছে অবস্থিত, তা নির্ধারণের জন্য E ও SE-এর ঠিক মাঝের মিডপয়েন্ট M পরীক্ষা করা হয়:
যদি pk<0 হয়: মিডপয়েন্ট M বৃত্তের চাপের ভেতরে অবস্থিত। অর্থাৎ আসল বৃত্তের চাপটি East (E) পিক্সেলের বেশি কাছে দিয়ে গেছে।
⟹East E=(xk+1,yk)পছন্দকরুন
যদি pk≥0 হয়: মিডপয়েন্ট M বৃত্তের চাপের বাইরে বা ওপরে অবস্থিত। অর্থাৎ আসল বৃত্তের চাপটি South-East (SE) পিক্সেলের বেশি কাছে দিয়ে গেছে।
⟹South-East SE=(xk+1,yk−1)পছন্দকরুন
পূর্ণসংখ্যা সিদ্ধান্ত মান, ৮-গুণ প্রতিসাম্য এবং মিডপয়েন্ট M পরীক্ষা ধাপে ধাপে সিমুলেশন করুন।
Mid-Point Circle Scan-Conversion Explorer
Visualize integer decision variables, 8-fold symmetry, and candidate midpoint evaluation.
Presets:
Circle Radius (R):10 px
Scan Step:Step 8 of 8
Computed Octant 2
7-Reflected Octants
True Circle Arc
Midpoint M
Step 8 State InspectorChosen: South-East (SE)
Current Point (P):
(7, 7)
Decision Variable (p):
6
Midpoint (M):
(8, 6.5)
Next Decision (p_next):
11
p = 6 ≥ 0: Midpoint M lies outside/on the true arc. The arc passes closer to South-East pixel (8, 6).
Trace Execution Table (Octant 2)
k
(x, y)
pk
Move
0
(0, 10)
-9
East (E)
1
(1, 10)
-6
East (E)
2
(2, 10)
-1
East (E)
3
(3, 10)
6
South-East (SE)
4
(4, 9)
-3
East (E)
5
(5, 9)
8
South-East (SE)
6
(6, 8)
5
South-East (SE)
7
(7, 7)
6
South-East (SE)
Incremental Decision Variable Updates & Initial Values (ইনক্রিমেন্টাল মান হিসাব)
প্রতি ধাপে শুরু থেকে pk=(xk+1)2+(yk−0.5)2−R2 গণনা করতে গেলে আবার গুণন চলে আসবে। তাই পূর্ববর্তী সিদ্ধান্ত মান pk থেকে ইনক্রিমেন্টালি (পর্যায়ক্রমিক যোগের মাধ্যমে) পরবর্তী pk+1 বের করা হয়।
যেহেতু xk+1=xk+1, তাই (xk+1+1)2−(xk+1)2=2xk+3=2xk+1+1।
কেস ১: East (E) পিক্সেল বেছে নিলে (pk<0)
এখানে yk+1=yk (অর্থাৎ y অপরিবর্তিত থাকে)। তাই y-এর পদগুলো কাটাকাটি চলে যায়:
pk+1=pk+2xk+3=pk+2xk+1+1
কেস ২: South-East (SE) পিক্সেল বেছে নিলে (pk≥0)
এখানে yk+1=yk−1 (অর্থাৎ y ১ কমে)। বীজগাণিতিক সমাধান করলে পাওয়া যায়:
pk+1=pk+2xk−2yk+5=pk+2xk+1−2yk+1+1
২. প্রাথমিক মান (p0) হিসাব
অ্যালগরিদম বৃত্তের শীর্ষবিন্দু থেকে কাজ শুরু করে:
(x0,y0)=(0,R)
প্রথম মিডপয়েন্ট M0 এর স্থানাঙ্ক:
M0=(1,R−21)
M0-কে F(x,y)-এ বসালে প্রাথমিক সিদ্ধান্ত মান p0 পাওয়া যায়:
p0=F(1,R−21)=12+(R−21)2−R2
p0=1+R2−R+41−R2=45−R
পূর্ণসংখ্যা রাউন্ডিং অপটিমাইজেশন (Integer Rounding for p0)
পূর্ণসংখ্যা ব্যাসার্ধ R-এর ক্ষেত্রে, যেহেতু পরবর্তী সিদ্ধান্ত ইনক্রিমেন্টগুলো (2x+3 ও 2x−2y+5) সবই বিশুদ্ধ পূর্ণসংখ্যা, তাই p0=45−R-এর ভগ্নাংশ 41-কে বাদ দিয়ে পূর্ণসংখ্যা এপ্রক্সিমেশন:
p0=1−R
ব্যবহার করলেও প্রতি ধাপে পিক্সেল নির্বাচনের ফলাফল ১০০% হুবহু একই থাকে এবং পুরো প্রক্রিয়ায় ফ্লোটিং-পয়েন্ট উঠিয়ে কেবল ইনটিজার ব্যবহার করা যায়!
Mid-Point Circle Algorithm Step-by-Step & Pseudocode (সিউডোকোড)
নিচে ১০০% পূর্ণসংখ্যা নির্ভর মিডপয়েন্ট সার্কেল অ্যালগরিদমের সম্পূর্ণ সিউডোকোড ও ইনটিজার লজিক দেওয়া হলো।
স্ট্যান্ডার্ড সিউডোকোড
text
উদাহরণ ধাপে ধাপে ট্র্যাকিং (R=10)
কেন্দ্র (0,0) এবং ব্যাসার্ধ R=10-এর জন্য অ্যালগরিদম ট্র্যাকিং:
প্রাথমিক অবস্থা: x=0,y=10, p0=1−10=−9।
ব্যাসার্ধ R = 10-এর জন্য অ্যালগরিদমের ধাপ ট্র্যাকিং
ধাপ k
বর্তমান x
বর্তমান y
সিদ্ধান্ত মান pk
শর্ত pk < 0
নির্বাচিত পিক্সেল
পরবর্তী সিদ্ধান্ত মান pk+1
0
0
10
-9
সত্য (True)
E (1, 10)
p1 = -9 + 2(1) + 1 = -6
1
1
10
-6
সত্য (True)
E (2, 10)
p2 = -6 + 2(2) + 1 = -1
2
2
10
-1
সত্য (True)
E (3, 10)
p3 = -1 + 2(3) + 1 = 6
3
3
10
6
মিথ্যা (>= 0)
SE (4, 9)
p4 = 6 + 2(4) - 2(9) + 1 = -3
4
4
9
-3
সত্য (True)
E (5, 9)
p5 = -3 + 2(5) + 1 = 8
5
5
9
8
মিথ্যা (>= 0)
SE (6, 8)
p6 = 8 + 2(6) - 2(8) + 1 = 5
6
6
8
5
মিথ্যা (>= 0)
SE (7, 7)
লুপ সমাপ্ত (x == y)
University Exam Questions & Solutions (বিশ্ববিদ্যালয়ের সম্ভাব্য প্রশ্ন ও পূর্ণাঙ্গ সমাধান)
বিশ্ববিদ্যালয় সেমিস্টার পরীক্ষায় মিডপয়েন্ট সার্কেল অ্যালগরিদম থেকে প্রায়শই যেসব থিওরিটিক্যাল প্রশ্ন ও গাণিতিক সমস্যা আসে, সেগুলো নিচে বিস্তারিতভাবে আলোচনা করা হলো।
১. থিওরিটিক্যাল প্রশ্ন ও উত্তর (Theoretical Questions & Answers)
প্রশ্ন: Derive the equation for decision variable (both initial and new) for mid-point circle algorithm. Also derive the equations for calculating mid-point (both for E and SE).
(মিড-পয়েন্ট সার্কেল অ্যালগরিদমের প্রাথমিক ও নতুন সিদ্ধান্ত ভেরিয়েবলের সমীকরণ প্রতিপাদন করো। পাশাপাশি E এবং SE উভয়ের জন্য মিড-পয়েন্ট গণনার সমীকরণ প্রতিপাদন করো।)
অংশ ১: E এবং SE উভয়ের জন্য মিড-পয়েন্ট গণনার সমীকরণ প্রতিপাদন [৩ নম্বর]
গাণিতিক প্রতিপাদন:
ধরি ধাপ k-তে বর্তমান প্লটকৃত পিক্সেল Pk=(xk,yk)।
২য় অকট্যান্টে (0≤x≤y) x-কে ১ একক বাড়ালে পরবর্তী xk+1 অবস্থানের সম্ভাব্য দুটি পিক্সেল হলো:
East (E):(xk+1,yk)
South-East (SE):(xk+1,yk−1)
E এবং SE পিক্সেল দুটির ঠিক মাঝের বর্তমান মিডপয়েন্ট Mk:
Mk=(xk+1,2yk+(yk−1))=(xk+1,yk−21)
১. ধাপ k-তে East (E) নির্বাচিত হলে:
নতুন পিক্সেল হবে Pk+1=(xk+1,yk)=(xk+1,yk+1) যেখানে xk+1=xk+1,yk+1=yk।
পরবর্তী ধাপ k+1-এর দুটি সম্ভাব্য পিক্সেল (xk+2,yk) ও (xk+2,yk−1)।
সুতরাং East (E) মুভের জন্য নতুন মিডপয়েন্ট (ME):
ME=(xk+2,yk−21)=(xk+1+1,yk+1−21)
২. ধাপ k-তে South-East (SE) নির্বাচিত হলে:
নতুন পিক্সেল হবে Pk+1=(xk+1,yk−1)=(xk+1,yk+1) যেখানে xk+1=xk+1,yk+1=yk−1।
পরবর্তী ধাপ k+1-এর দুটি সম্ভাব্য পিক্সেল (xk+2,yk−1) ও (xk+2,yk−2)।
সুতরাং South-East (SE) মুভের জন্য নতুন মিডপয়েন্ট (MSE):
MSE=(xk+2,(yk−1)−21)=(xk+2,yk−23)=(xk+1+1,yk+1−21)
অংশ ২: প্রাথমিক ও নতুন সিদ্ধান্ত ভেরিয়েবলের সমীকরণ প্রতিপাদন [৩ নম্বর]
গাণিতিক প্রতিপাদন:
মূলবিন্দুতে কেন্দ্রবিশিষ্ট বৃত্তের ইমপ্লিসিট ফাংশন: F(x,y)=x2+y2−R2।
সিদ্ধান্ত ভেরিয়েবল pk হলো মিডপয়েন্ট Mk-তে ফাংশনের মান:
pk=F(Mk)=F(xk+1,yk−21)=(xk+1)2+(yk−21)2−R2
পূর্ণসংখ্যা ব্যাসার্ধ R-এর জন্য ইনটিজার অ্যাপ্রক্সিমেশন:
p0=1−R
খ. নতুন সিদ্ধান্ত ভেরিয়েবল (pk+1):
পরবর্তী ধাপ k+1-এ pk+1=F(Mk+1)=(xk+1+1)2+(yk+1−21)2−R2।
বিয়োগ করে পাই:
pk+1−pk=[(xk+1+1)2−(xk+1)2]+[(yk+1−21)2−(yk−21)2]
যেহেতু xk+1=xk+1, তাই (xk+2)2−(xk+1)2=2xk+3=2xk+1+1।
East (E) নির্বাচিত হলে (pk<0):yk+1=yk⟹pk+1=pk+2xk+1+1(অথবাpk+2xk+3)
South-East (SE) নির্বাচিত হলে (pk≥0):yk+1=yk−1⟹pk+1=pk+2xk+1−2yk+1+1(অথবাpk+2xk−2yk+5)
প্রশ্ন ১: সরাসরি কার্তেসীয় ও পোলার সমীকরণের বদলে মিডপয়েন্ট সার্কেল অ্যালগরিদম ব্যবহারের সুবিধা কী?
উত্তর:
ফ্লোটিং-পয়েন্ট ও বর্গমূল বর্জন: কার্তেসীয় সমীকরণে প্রতি পিক্সেলের জন্য ধীরগতির বর্গমূল (R2−x2) এবং পোলার সমীকরণে সাইন/কোসাইন (sinθ,cosθ) প্রয়োজন হয়। মিডপয়েন্ট অ্যালগরিদমে কেবল পূর্ণসংখ্যার যোগ, বিয়োগ ও বিট-শিফট ব্যবহৃত হয়।
অসম ব্যবধান ও গ্যাপ দূরীকরণ: সরাসরি পদ্ধতিতে বৃত্তের খাড়া অংশে (dxdy→∞) পিক্সেলের মাঝে দৃশ্যমান ফাঁকা তৈরি হয়। মিডপয়েন্ট অ্যালগরিদমে প্রতি ধাপে সংলগ্ন সঠিক পিক্সেল (E বা SE) নির্বাচিত হওয়ায় কোনো গ্যাপ থাকে না।
উত্তর:
বৃত্তের জ্যামিতিক প্রতিসাম্যের কারণে ৩৬০° পরিধির মধ্যে মাত্র ৪৫° (একটি অকট্যান্ট, যথা x=0 থেকে x=y) গণনা করলেই যথেষ্ট।
বাকি ৩১৫° পরিধির পিক্সেলগুলো কেবল চিহ্নের পরিবর্তন (±x,±y) এবং স্থানাঙ্কের পারস্পরিক অদলবদল ((x,y)↔(y,x)) করে সরাসরি বের করা যায়। ফলে মোট কম্পিউটেশনাল সময় 81 বা ১২.৫%-এ নেমে আসে এবং ৮৭.৫% সময় সাশ্রয় হয়।
২. গাণিতিক সমস্যা ও পূর্ণাঙ্গ সমাধান (Step-by-Step Mathematical Problems)
সমস্যা ১: মূলবিন্দুতে কেন্দ্র এবং R=8 ব্যাসার্ধবিশিষ্ট বৃত্ত
প্রশ্ন: মিডপয়েন্ট সার্কেল অ্যালগরিদম ব্যবহার করে কেন্দ্র (0,0) এবং ব্যাসার্ধ R=8-এর জন্য প্রথম অকট্যান্টের পিক্সেলসমূহ নির্ণয় করো এবং একটি পূর্ণাঙ্গ টেবিল তৈরি করো।
সমাধান:
প্রদত্ত: কেন্দ্র (xc,yc)=(0,0), ব্যাসার্ধ R=8
শুরুর বিন্দু:(x0,y0)=(0,8)
প্রাথমিক সিদ্ধান্ত ভেরিয়েবল:p0=1−R=1−8=−7
ইনক্রিমেন্টাল সূত্রসমূহ:
যদি pk<0 হয় (East / E):
xk+1=xk+1,yk+1=ykpk+1=pk+2xk+1+1
যদি pk≥0 হয় (South-East / SE):
xk+1=xk+1,yk+1=yk−1pk+1=pk+2xk+1−2yk+1+1
R = 8 এর জন্য সম্পূর্ণ স্টেপ ট্র্যাকিং টেবিল
ধাপ k
pk
শর্ত (pk < 0?)
পরবর্তী (x, y)
2x_{k+1}
2y_{k+1}
পরবর্তী pk+1 হিসাব
pk+1
0
-7
হ্যাঁ (E)
(1, 8)
2
16
p1 = -7 + 2(1) + 1
-4
1
-4
হ্যাঁ (E)
(2, 8)
4
16
p2 = -4 + 2(2) + 1
1
2
1
না (SE)
(3, 7)
6
14
p3 = 1 + 2(3) - 2(7) + 1
-6
3
-6
হ্যাঁ (E)
(4, 7)
8
14
p4 = -6 + 2(4) + 1
3
4
3
না (SE)
(5, 6)
10
12
p5 = 3 + 2(5) - 2(6) + 1
2
5
2
না (SE)
(6, 5)
-
-
x > y (6 > 5) হওয়ায় সমাপ্ত
-
১ম অকট্যান্টে প্রাপ্ত পিক্সেলসমূহ:(0,8),(1,8),(2,8),(3,7),(4,7),(5,6),(6,5)
৮-গুণ প্রতিসাম্য দ্বারা প্রতিটি বিন্দুর সমমিত ৮টি পিক্সেল:
সমস্যা ৩: মিডপয়েন্ট সার্কেল অ্যালগরিদম প্রতিপাদন ও কেন্দ্র (2,2), ব্যাসার্ধ R=3 বিশিষ্ট বৃত্ত অঙ্কন [১১তম ব্যাচ ফাইনাল পরীক্ষা (11th Batch)]
পরীক্ষার প্রশ্ন [নম্বর: ৭]
প্রশ্ন: Derive the Mid-point circle algorithm. Considering the midpoint circle algorithm draw a circle with radius 3 and center (2,2).
(মিড-পয়েন্ট সার্কেল অ্যালগরিদম প্রতিপাদন করো। মিডপয়েন্ট সার্কেল অ্যালগরিদম ব্যবহার করে কেন্দ্র (2,2) এবং ব্যাসার্ধ ৩ বিশিষ্ট একটি বৃত্ত অঙ্কন করো।)
ধাপে ধাপে পরীক্ষার সমাধান:
১ম অংশ: মিডপয়েন্ট সার্কেল অ্যালগরিদমের প্রতিপাদন [৩.৫ নম্বর]
১. বৃত্তের ইমপ্লিসিট ফাংশন:
মূলবিন্দুতে কেন্দ্র এবং R ব্যাসার্ধের বৃত্তের সমীকরণ:
F(x,y)=x2+y2−R2
F(x,y)<0⟹ বিন্দুটি বৃত্তের অভ্যন্তরে অবস্থিত।
F(x,y)=0⟹ বিন্দুটি বৃত্তের পরিধির ওপর অবস্থিত।
F(x,y)>0⟹ বিন্দুটি বৃত্তের বাইরে অবস্থিত।
২. মিডপয়েন্ট সিদ্ধান্ত গ্রহণ:
২য় অকট্যান্টে (0≤x≤y) শীর্ষবিন্দু (0,R) থেকে প্রতি ধাপে x বরাবর ১ একক বৃদ্ধি পায়। দুটি সম্ভাব্য পিক্সেল হলো East E(xk+1,yk) এবং South-East SE(xk+1,yk−1)।
এদের মধ্যবর্তী মিডপয়েন্ট:
M=(xk+1,yk−21)
সিদ্ধান্ত ভেরিয়েবল pk=F(M)=(xk+1)2+(yk−21)2−R2।
৩. প্রাথমিক সিদ্ধান্ত প্যারামিটার (p0):
সূচনা বিন্দু (x0,y0)=(0,R)-এর জন্য:
p0=F(1,R−21)=12+(R−21)2−R2=45−R≈1−R
৪. ইনক্রিমেন্টাল সিদ্ধান্ত আপডেট:
যদি pk<0 হয় (E নির্বাচন):yk+1=yk⟹pk+1=pk+2xk+1+1।
যদি pk≥0 হয় (SE নির্বাচন):yk+1=yk−1⟹pk+1=pk+2xk+1−2yk+1+1।
২য় অংশ: কেন্দ্র (xc,yc)=(2,2) এবং R=3 এর গাণিতিক হিসাব ও চিত্রাঙ্কন [৩.৫ নম্বর]