X-shear, Y-shear, arbitrary reference lines, shear angles, area preservation, homogeneous matrices, and multi-perspective numericals
35 min read
Created ৫ সেপ, ২০২৬
2D Shearing (শিয়ারিং) কী?
কম্পিউটার গ্রাফিক্সে 2D Shearing (বা Skew Transformation) হলো এমন একটি অ্যাফাইন (affine) রূপান্তর, যেখানে কোনো অবজেক্টের প্রতিটি বিন্দুকে একটি নির্দিষ্ট অক্ষের সমান্তরালে এমনভাবে সরিয়ে দেওয়া হয়, যা তার লম্ব স্থানাঙ্কের (perpendicular coordinate) দূরত্বের সমানুপাতিক।
সহজ কথায় চিন্তা করতে পারো এক প্যাকেট খেলার তাস (playing cards) নিয়ে:
এক বান্ডিল তাস টেবিলের ওপর রাখা আছে। এবার নিচে হাত দিয়ে চেপে না ধরে যদি ওপরের তাসের ওপর আলতো করে ডানদিকে ধাক্কা দাও—কী ঘটবে?
একদম নিচের তাসটা টেবিলের সাথে লেগে থেকে স্থির থাকবে (y=0)।
কিন্তু ওপরের তাসগুলো তাদের উচ্চতা অনুযায়ী ক্রমশ বেশি বেশি ডানদিকে পিছলে যাবে!
পুরো তাসের বান্ডিলের খাড়া আয়তক্ষেত্রাকার প্রোফাইলটি হেলে গিয়ে সুন্দর একটি সামান্তরিকে (parallelogram) পরিণত হবে।
Translation বা Rotation যেমন রিজিড বডি রূপান্তর (যেখানে কোনো কোণ বা দৈর্ঘ্য বদলায় না), Shearing কিন্তু অবজেক্টের অভ্যন্তরীণ কোণ এবং কর্ণের দৈর্ঘ্য বদলে দেয়। তবে শিয়ারিংয়ের সবচাইতে চমৎকার বৈশিষ্ট্য হলো: বিশুদ্ধ শিয়ারিংয়ে অবজেক্টের ক্ষেত্রফল (Area) পুরোপুরি অপরিবর্তিত থাকে!
det(Mshear)=1
কারণ সামান্তরিকের ভূমির দৈর্ঘ্য আগের মতোই থাকে এবং দুই সমান্তরাল রেখার মধ্যবর্তী লম্ব উচ্চতাও অপরিবর্তিত থাকে। ফলে ভূমি×উচ্চতা সূত্রে ক্ষেত্রফল হুবহু একই থাকে।
X-অক্ষের সমান্তরালে শিয়ারিং (X-Shear)
X-Shear-এ প্রতিটি বিন্দু আনুভূমিকভাবে (X-অক্ষের সমান্তরালে) সরে যায়। তবে এই সরণের মান নির্ভর করে বিন্দুটি উলম্বভাবে কতটা উঁচুতে অবস্থিত তার ওপর (y-এর মানের ওপর)। লক্ষ্য করো, বিন্দুর উলম্ব স্থানাঙ্ক y কিন্তু পুরোপুরি অপরিবর্তিত থাকে:
x′=x+shx⋅y,y′=y
এখানে shx হলো X-অক্ষ বরাবর শিয়ার প্যারামিটার (Shear Factor)।
X-Shear এর জ্যামিতিক বৈশিষ্ট্য
X-অক্ষের ওপর অবস্থিত বিন্দুগুলো একটুও নড়ে না:
যেসব বিন্দুর জন্য y=0, তাদের ক্ষেত্রে x′=x+shx(0)=x। অর্থাৎ পুরো X-অক্ষটি একটি স্থির রেখা (Invariant Axis) হিসেবে কাজ করে।
দিক অনুযায়ী সরণ:
যদি shx>0 হয়: X-অক্ষের ওপরের বিন্দুগুলো (y>0) ডানদিকে (+x) সরে যায়, আর নিচের বিন্দুগুলো (y<0) বাঁদিকে (−x) সরে যায়।
যদি shx<0 হয়: ওপরের বিন্দুগুলো বাঁদিকে এবং নিচের বিন্দুগুলো ডানদিকে সরে যায়।
X-অক্ষের সমান্তরাল রেখাগুলো অনুভূমিকই থাকে:
যেকোনো অনুভূমিক রেখা y=c শিয়ারিংয়ের পরও সমান্তরাল থাকে এবং এর ওপরের যেকোনো রেখাংশের দৈর্ঘ্য অবিকল একই থাকে।
খাড়া রেখাগুলো হেলে যায়:
খাড়া রেখা x=c একটি নির্দিষ্ট কোণ θ-তে হেলে x′−shx⋅y′=c সমীকরণের তির্যক রেখায় পরিণত হয়।
হোমোজেনিয়াস স্থানাঙ্ক ম্যাট্রিক্স রূপ (Homogeneous Matrix)
3×3 হোমোজেনিয়াস ম্যাট্রিক্স আকারে আমরা লিখতে পারি:
x′y′1=Shx(shx)xy1=100shx10001xy1
ম্যাট্রিক্স গুণ করলে দেখতে পাবে:
x′=1⋅x+shx⋅y+0⋅1=x+shx⋅yy′=0⋅x+1⋅y+0⋅1=y1=0⋅x+0⋅y+1⋅1=1
Y-অক্ষের সমান্তরালে শিয়ারিং (Y-Shear)
Y-Shear হলো X-Shear এর ঠিক বিপরীত ঘটনা: এখানে প্রতিটি বিন্দু উলম্বভাবে (Y-অক্ষের সমান্তরালে) সরে যায় তার অনুভূমিক দূরত্ব x-এর ওপর ভিত্তি করে। তবে বিন্দুর x-স্থানাঙ্ক সম্পূর্ণ স্থির থাকে:
x′=x,y′=y+shy⋅x
এখানে shy হলো Y-অক্ষ বরাবর শিয়ার প্যারামিটার।
Y-Shear এর জ্যামিতিক বৈশিষ্ট্য
Y-অক্ষের ওপর অবস্থিত বিন্দু স্থির থাকে:
যেহেতু Y-অক্ষে x=0, তাই y′=y+shy(0)=y। পুরো Y-অক্ষটি এখানে অপরিবর্তিত থাকে।
দিক অনুযায়ী সরণ:
shy>0 হলে: ডানের বিন্দুগুলো (x>0) ওপরের দিকে (+y) ওঠে, আর বাঁয়ের বিন্দুগুলো (x<0) নিচের দিকে (−y) নামে।
shy<0 হলে: ডানের বিন্দুগুলো নিচে নামে এবং বাঁয়ের বিন্দুগুলো ওপরে ওঠে।
উলম্ব রেখাগুলোর দৈর্ঘ্য ঠিক থাকে:
যেকোনো উলম্ব রেখা x=k সোজা থাকে এবং তার দৈর্ঘ্য অপরিবর্তিত থাকে। কিন্তু আনুভূমিক রেখাগুলো ϕ কোণে হেলে যায়।
হোমোজেনিয়াস স্থানাঙ্ক ম্যাট্রিক্স
x′y′1=Shy(shy)xy1=1shy0010001xy1
যুগপৎ বা দ্বিমুখী শিয়ারিং (Simultaneous / Bidirectional XY-Shear)
যদি একই সাথে উভয় অক্ষে শিয়ারিং প্রয়োগ করা হয়, তবে প্রতিটি স্থানাঙ্ক অন্য স্থানাঙ্কের মাধ্যমে প্রভাবিত হয়:
খেয়াল করো, এই দুই ম্যাট্রিক্সের উপাদানের মান আলাদা। তাই Shy⋅Shx=Shx⋅Shy।
নির্দিষ্ট রেফারেন্স রেখার সাপেক্ষে শিয়ারিং (Arbitrary Reference Line)
বাস্তব গ্রাফিক্স ডিজাইনে (যেমন ফন্ট ইটালিক করার সময় বেসলাইন স্থির রাখা অথবা কোনো উইজেটের নিচের প্রান্তকে লক করে রাখা) আমরা সবসময় মূল অক্ষের সাপেক্ষে শিয়ারিং করি না। বরং একটি নির্দিষ্ট রেফারেন্স রেখা y=yref অথবা x=xref-এর সাপেক্ষে শিয়ারিং করতে হয়।
কেস A: y=yref রেখার সাপেক্ষে X-Shear
এখানে শর্ত হলো: y=yref রেখার ওপর থাকা কোনো বিন্দু নড়বে না (x′=x)। আর ওপর বা নিচের বিন্দুগুলো তাদের আপেক্ষিক দূরত্ব (y−yref)-এর অনুপাতে সরবে:
x′=x+shx(y−yref),y′=y
৩-ধাপের কম্পোজিট ম্যাট্রিক্স প্রতিপাদন:
উলম্বভাবে −yref ট্রান্সলেশন করে রেফারেন্স রেখাটিকে মূল X-অক্ষে নামিয়ে আনা: T(0,−yref)
আদর্শ X-শিয়ার প্রয়োগ করা: Shx(shx)
পুনরায় +yref ট্রান্সলেশন করে আগের উচ্চতায় ফিরিয়ে নিয়ে যাওয়া: T(0,yref)
একই যুক্তিতে, যখন একটি উলম্ব রেখা x=xref স্থির রাখতে হবে:
x′=x,y′=y+shy(x−xref)
কম্পোজিট ম্যাট্রিক্স:
Shy,xref=1shy00100−shy⋅xref1
শিয়ার প্যারামিটার ও শিয়ার কোণের সম্পর্ক (θ)
অনেক সময় গ্রাফিক্স ইঞ্জিনে সরাসরি ফ্যাক্টর shx না দিয়ে বলা থাকে: "টেক্সটটিকে উলম্বের সাথে 30∘ কোণে কাত করো।" এই হেলানো কোণ এবং শিয়ার প্যারামিটারের সম্পর্ক অত্যন্ত চমৎকার ত্রিকোণমিতিক নিয়মে কাজ করে।
ত্রিকোণমিতিক প্রতিপাদন:
একটি উলম্ব রেখাংশ (0,0) থেকে (0,h)-এর কথা বিবেচনা করো:
শিয়ারিংয়ের পর শীর্ষবিন্দু (0,h) সরে গিয়ে পৌঁছাবে (shx⋅h,h)-এ।
ফলে উল্লম্ব Y-অক্ষের সাথে এটি যে কোণ θ তৈরি করে, তা সমকোণী ত্রিভুজের ট্যানজেন্ট নিয়ম মেনে চলে:
যেহেতু উভয় ক্ষেত্রেই ডিটারমিন্যান্টের মান হুবহু 1, তাই বিশুদ্ধ শিয়ারিংয়ে যেকোনো অবজেক্টের ক্ষেত্রফল পুরোপুরি অপরিবর্তিত থাকে (A′=1×A=A)।
২. রেখার সরলরৈখিকতা ও সমান্তরালত্ব বজায় রাখা
যেহেতু শিয়ারিং একটি লিনিয়ার অ্যাফাইন ট্রান্সফর্মেশন:
সরলরেখা রূপান্তরের পরও সরলরেখা থাকে।
রূপান্তরের পূর্বে সমান্তরাল থাকা রেখাদ্বয় রূপান্তরের পরও হুবহু সমান্তরাল থাকে।
সমান্তরাল রেখাংশগুলোর মধ্যকার দৈর্ঘ্যের অনুপাত অক্ষুণ্ণ থাকে।
৩. বিপরীত শিয়ারিং ম্যাট্রিক্স (Inverse Matrix)
শিয়ারিংয়ের প্রভাব বাতিল করে পূর্বের অবস্থানে ফিরতে হলে সমমানের কিন্তু বিপরীতমুখী শিয়ার (−sh) প্রয়োগ করতে হয়:
Shx(shx)−1=Shx(−shx)=100−shx10001
Shy(shy)−1=Shy(−shy)=1−shy0010001
ইন্টারঅ্যাক্টিভ 2D শিয়ারিং ও অ্যাফাইন এক্সপ্লোরার
নিচের ইন্টারঅ্যাক্টিভ ডেমোতে স্লাইডার টেনে shx এবং shy এর মান পরিবর্তন করে দেখো কীভাবে অবজেক্টটি হেলে যায় কিন্তু তার ক্ষেত্রফল ও সমান্তরাল বাহুগুলো পুরোপুরি ঠিক থাকে:
বহুমাত্রিক গাণিতিক সমস্যা ও সমাধান (১০টি ভিন্ন অ্যাঙ্গেল)
অ্যাঙ্গেল ১: মৌলিক বিন্দুর X ও Y শিয়ারিং
সমস্যা ১
একটি বিন্দু P(4,3)-এর ওপর নিম্নলিখিত রূপান্তরগুলো প্রয়োগ করো:
(ক) শিয়ার ফ্যাক্টর shx=2 সহ X-শিয়ার।
(খ) শিয়ার ফ্যাক্টর shy=1.5 সহ Y-শিয়ার।
উভয় ক্ষেত্রে নতুন স্থানাঙ্ক P′ নির্ণয় করো এবং কোন স্থানাঙ্কটি কেন পরিবর্তন হলো তা ব্যাখ্যা করো।
(ক) shx=2 সহ X-শিয়ার:x′=x+shx⋅y=4+2(3)=4+6=10y′=y=3Pa′=(10,3)
ব্যাখ্যা: X-শিয়ারে বিন্দুটির স্থান পরিবর্তন কেবল অনুভূমিক বরাবর ঘটেছে (+6 একক), কারণ বিন্দুটি X-অক্ষ থেকে 3 একক উঁচুতে অবস্থিত (y=3)। উল্লম্ব স্থানাঙ্ক y=3 অপরিবর্তিত থাকে।
(খ) shy=1.5 সহ Y-শিয়ার:x′=x=4y′=y+shy⋅x=3+1.5(4)=3+6=9Pb′=(4,9)
ব্যাখ্যা: Y-শিয়ারে উলম্ব বরাবর সরণ ঘটেছে (+6 একক), কারণ বিন্দুটি Y-অক্ষ থেকে ডানে 4 একক দূরে অবস্থিত (x=4)। অনুভূমিক স্থানাঙ্ক x=4 অপরিবর্তিত থাকে।
অ্যাঙ্গেল ২: একক বর্গক্ষেত্রের শিয়ারিং এবং ক্ষেত্রফল ধ্রুব থাকার যাচাই
সমস্যা ২
একটি বর্গক্ষেত্রের শীর্ষবিন্দুগুলো হলো A(0,0), B(2,0), C(2,2), এবং D(0,2)। এর ওপর shx=1.2 মানের X-শিয়ার প্রয়োগ করো।
(ক) নতুন শীর্ষবিন্দু A′,B′,C′,D′ নির্ণয় করো।
(খ) শিয়ারকৃত চতুর্ভুজের বাহুগুলোর দৈর্ঘ্য বের করো।
(গ) গাণিতিকভাবে প্রমাণ করো যে নতুন আকৃতির ক্ষেত্রফল আদি বর্গক্ষেত্রের ক্ষেত্রফলের সমান।
(ক) নতুন স্থানাঙ্কসমূহ:
সূত্র: x′=x+1.2y,y′=y
A(0,0): x′=0+1.2(0)=0,y′=0⟹A′(0,0)
B(2,0): x′=2+1.2(0)=2,y′=0⟹B′(2,0)
C(2,2): x′=2+1.2(2)=2+2.4=4.4,y′=2⟹C′(4.4,2)
D(0,2): x′=0+1.2(2)=2.4,y′=2⟹D′(2.4,2)
খেয়াল করো, A ও B শীর্ষবিন্দু দুটি X-অক্ষের ওপর (y=0) থাকায় তাদের অবস্থান বিন্দুমাত্র পরিবর্তিত হয়নি!
বর্গক্ষেত্রটি একটি সামান্তরিকে রূপান্তরিত হয়েছে যার সমান্তরাল বাহুগুলোর দৈর্ঘ্য 2.0 এবং 3.124।
(গ) ক্ষেত্রফল যাচাই:
আদি ক্ষেত্রফল: Area(ABCD)=2×2=4.0
সামান্তরিকের ক্ষেত্রফল: ভূমি×উচ্চতা=∣A′B′∣×(ytop−ybottom)=2.0×2.0=4.0
ক্ষেত্রফল সম্পূর্ণ অপরিবর্তিত রয়েছে (det=1)।
অ্যাঙ্গেল ৩: হোমোজেনিয়াস ম্যাট্রিক্স গুণের সাহায্যে ত্রিভুজ রূপান্তর
সমস্যা ৩
একটি ত্রিভুজের শীর্ষবিন্দুগুলো A(1,1), B(4,1), এবং C(2,4)।
(ক) 3×3 শীর্ষবিন্দু ম্যাট্রিক্স [P] তৈরি করো এবং shy=0.5 সহ Y-শিয়ার ম্যাট্রিক্সের সাথে গুণ করে নতুন শীর্ষবিন্দু ম্যাট্রিক্স [P′] নির্ণয় করো।
(খ) ত্রিভুজের নতুন শীর্ষবিন্দুগুলোর স্থানাঙ্ক লেখো।
(গ) ক্ষেত্রফল গণনা করে ডিটারমিন্যান্টের নিয়মের সত্যতা যাচাই করো।
(ক) ম্যাট্রিক্স গুণ:
[P]=111411241,Shy(0.5)=10.50010001
[P′]=Shy(0.5)⋅[P]=10.50010001111411241
সারি ১ (x′):
[1(1)+0,1(4)+0,1(2)+0]=[1,4,2]
সারি ২ (y′):
[0.5(1)+1(1),0.5(4)+1(1),0.5(2)+1(4)]=[1.5,3.0,5.0]
সারি ৩ (w′):
[1,1,1]
[P′]=11.5143.0125.01
(খ) নতুন শীর্ষবিন্দুসমূহ:A′(1,1.5),B′(4,3.0),C′(2,5.0)
(গ) ক্ষেত্রফল যাচাই:
আদি ক্ষেত্রফল:
Area=21∣1(1−4)+4(4−1)+2(1−1)∣=21∣−3+12+0∣=4.5
নতুন ক্ষেত্রফল:
Area′=21∣1(3−5)+4(5−1.5)+2(1.5−3)∣=21∣−2+14−3∣=21(9)=4.5✓
ক্ষেত্রফল হুবহু 4.5 একক রয়ে গেছে।
একটি আয়তক্ষেত্রের শীর্ষবিন্দুগুলো A(1,2), B(5,2), C(5,6), এবং D(1,6)। y=2 রেখাকে রেফারেন্স রেখা ধরে shx=0.75 মানের X-শিয়ার প্রয়োগ করো।
(ক) 3×3 কম্পোজিট ম্যাট্রিক্স তৈরি করো।
(খ) চারটি শীর্ষবিন্দুর নতুন স্থানাঙ্ক বের করো।
(গ) কোন বাহুটি স্থির রয়েছে তা নির্দেশ করো।
(ক) কম্পোজিট ম্যাট্রিক্স:
রেফারেন্স রেখা yref=2 এবং shx=0.75:
Shx,yref=100shx10−shx⋅yref01=1000.7510−0.75(2)01=1000.7510−1.501
(খ) স্থানাঙ্ক নির্ণয় (x′=x+0.75(y−2),y′=y):
A(1,2): x′=1+0.75(2−2)=1,y′=2⟹A′(1,2)
B(5,2): x′=5+0.75(2−2)=5,y′=2⟹B′(5,2)
C(5,6): x′=5+0.75(6−2)=5+3=8,y′=6⟹C′(8,6)
D(1,6): x′=1+0.75(6−2)=1+3=4,y′=6⟹D′(4,6)
(গ) স্থির বাহু:
যেহেতু নিচের বাহু AB হুবহু রেফারেন্স রেখা y=2-এর ওপর অবস্থিত, তাই এই বাহুটির কোনো পরিবর্তন ঘটেনি (A′=A,B′=B)। ওপরের বাহু CD ডানদিকে 3 একক সরে গেছে।
একটি ত্রিভুজের শীর্ষবিন্দুগুলো A(3,1), B(3,5), এবং C(7,3)। x=3 উল্লম্ব রেখাকে রেফারেন্স রেখা ধরে shy=1.0 মানের Y-শিয়ার প্রয়োগ করো।
(ক) রূপান্তরের সমীকরণ ও ম্যাট্রিক্স লেখো।
(খ) রূপান্তরিত ত্রিভুজের স্থানাঙ্কসমূহ নির্ণয় করো।
(ক) সমীকরণ ও ম্যাট্রিক্স:
রেফারেন্স রেখা xref=3 এর জন্য:
x′=x,y′=y+1.0(x−3)Shy,xref=3=11.000100−1.0(3)1=1100100−31
(খ) স্থানাঙ্ক নির্ণয়:
A(3,1): x′=3,y′=1+1(3−3)=1⟹A′(3,1)
B(3,5): x′=3,y′=5+1(3−3)=5⟹B′(3,5)
C(7,3): x′=7,y′=3+1(7−3)=3+4=7⟹C′(7,7)
উল্লম্ব বাহু AB স্থির থাকে এবং শীর্ষবিন্দু C খাড়াভাবে 4 একক ওপরে উঠে যায়।
অ্যাঙ্গেল ৬: কৌণিক হেলানো কোণ থেকে শিয়ার প্যারামিটার নির্ণয় (sh=tanθ)
সমস্যা ৬
একটি টেক্সট ক্যারেক্টার x∈[0,2],y∈[0,4] ব্লকে সংজ্ঞায়িত। ক্যারেক্টারটিকে ইটালিক লুক দেওয়ার জন্য y=0 বেসলাইনের সাপেক্ষে উলম্বের সাথে θ=30∘ কোণে X-শিয়ার করতে হবে।
(ক) শিয়ার প্যারামিটার shx-এর মান বের করো।
(খ) ক্যারেক্টারের ওপরের ডান কোণার বিন্দু P(2,4)-এর নতুন অবস্থান বের করো।
(গ) যদি কোণ বৃদ্ধি পেয়ে θ=45∘ হয়, তবে বিন্দুটির অবস্থান কী হবে?
(ক) প্যারামিটার গণনা:shx=tan(30∘)=31≈0.5774
(খ) θ=30∘ এর জন্য নতুন বিন্দু:x′=x+shx⋅y=2+31(4)=2+2.3094≈4.3094y′=y=4P30∘′=(4.309,4)
(গ) θ=45∘ এর জন্য:shx=tan(45∘)=1.0x′=2+1.0(4)=6.0,y′=4⟹P45∘′=(6.0,4.0)
একটি বিন্দু P(2,3), shx=2, এবং shy=1 দেওয়া আছে।
(ক) যুগপৎ শিয়ারিং Shxy(2,1) প্রয়োগে P′ বের করো।
(খ) প্রথমে X-শিয়ার এবং পরে Y-শিয়ার প্রয়োগে P′′ বের করো।
(গ) প্রথমে Y-শিয়ার এবং পরে X-শিয়ার প্রয়োগে P′′′ বের করো।
ফলাফল তিনটির তুলনা করো।
ধাপ ২ (Y-শিয়ার): x2=x1=8,y2=y1+1(x1)=3+1(8)=11P′′=(8,11)
(গ) আগে Y তারপর X:
ধাপ ১ (Y-শিয়ার): x1=2,y1=3+1(2)=5⟹P1(2,5)
ধাপ ২ (X-শিয়ার): x2=x1+2(y1)=2+2(5)=12,y2=5P′′′=(12,5)
তুলনামূলক বিশ্লেষণ:
কোনো ফলাফলই পরস্পরের সমান নয়। পর্যায়ক্রমিক রূপান্তরে দ্বিতীয় ধাপটি প্রথম ধাপের দ্বারা ইতোমধ্যে পরিবর্তিত হওয়া স্থানাঙ্কের ওপর ক্রিয়া করে, যার ফলে যৌগিক বিকৃতি (shx⋅shy) যুক্ত হয়।
অ্যাঙ্গেল ৮: বিপরীত শিয়ারিং ও মূল আকৃতি পুনরুদ্ধার (Inverse Shear)
সমস্যা ৮
ভুলবশত একটি বহুভুজের ওপর shx=1.5 মানের X-শিয়ার প্রয়োগ হয়ে গেছে। বর্তমানে দেখা যাচ্ছে শীর্ষবিন্দুগুলো A′(7,2), B′(11,2), এবং C′(13,5)।
(ক) ইনভার্স শিয়ার ম্যাট্রিক্স লেখো।
(খ) মূল আদি শীর্ষবিন্দু A,B,C উদ্ধার করো।
(গ) ফরোয়ার্ড শিয়ার পুনরায় চালিয়ে হিসাবটি যাচাই করো।