Theory
આકારોને આમતેમ ફેરવવા
આકાર દોરવો એ એક વાત છે; એને ખસેડવો, નાનોમોટો કરવો અને ફેરવવો એ બીજી, અને એ જ graphics ને જીવંત બનાવે છે. આ ક્રિયાઓ એટલે ભૌમિતિક transformations, અને એમાં ત્રણ પાયાનાં છે: translation (ખસેડવું), scaling (માપ બદલવું) અને rotation (ફેરવવું).
દરેક બિંદુ (x, y) ને સાદા નિયમથી નવા બિંદુ (x', y') માં ફેરવે છે. આ પાઠ દરેક માટે નિયમ અને ગણેલો દાખલો આપે છે, અને પછી homogeneous coordinates રજૂ કરે છે, જે એવી ચતુર યુક્તિ છે કે ત્રણેયને એક જ સરખી matrix ની ક્રિયા તરીકે લખી શકાય. તમે અગાઉ શીખેલું matrix નું ગણિત બરાબર આના પાયામાં છે.
Theory
Translation અને scaling
Translation બિંદુને tx અને ty જેટલું ઉમેરીને ખસેડે છે:
x' = x + tx, y' = y + ty
દાખલો: (2, 3) ને (5, -1) જેટલું ખસેડતાં મળે (2+5, 3-1) = (7, 2). આકાર પોતાનું માપ કે દિશા બદલ્યા વગર ખસે છે.
Scaling (મૂળબિંદુની આસપાસ) scale factors sx અને sy વડે ગુણીને માપ બદલે છે:
x' = x ગુણ્યા sx, y' = y ગુણ્યા sy
દાખલો: (2, 3) ને (2, 2) વડે scale કરતાં મળે (2 ગુણ્યા 2, 3 ગુણ્યા 2) = (4, 6), એટલે કે મૂળબિંદુથી બમણું દૂર. 1 થી મોટા scale factors મોટું કરે છે, 1 થી નાના નાનું કરે છે. Translation ઉમેરે છે; scaling ગુણે છે.
Theory
મૂળબિંદુની આસપાસ rotation
Rotation મૂળબિંદુની આસપાસ t ખૂણે બિંદુને sine અને cosine વાપરીને (0, 0) ની આસપાસ ફેરવે છે:
x' = x ગુણ્યા cos(t) ઓછા y ગુણ્યા sin(t)
y' = x ગુણ્યા sin(t) વત્તા y ગુણ્યા cos(t)
દાખલો: (2, 3) ને 90 અંશે ફેરવો. 90 અંશે cos(t) = 0 અને sin(t) = 1, એટલે:
x' = 2 ગુણ્યા 0 ઓછા 3 ગુણ્યા 1 = -3
y' = 2 ગુણ્યા 1 વત્તા 3 ગુણ્યા 0 = 2
એટલે (2, 3) ફરીને (-3, 2) થાય છે. બિંદુ મૂળબિંદુની આસપાસ ઘડિયાળની વિરુદ્ધ દિશામાં પા ભાગનો આંટો ફર્યું છે. Rotation માપ અને આકાર જાળવી રાખે છે; એ ફક્ત દિશા બદલે છે.
At a glance
| Transformation | નિયમ | અસર |
|---|---|---|
| Translation | x' = x + tx, y' = y + ty | આકારને ખસેડે (ઉમેરે છે) |
| Scaling | x' = x ગુણ્યા sx, y' = y ગુણ્યા sy | મૂળબિંદુની આસપાસ માપ બદલે (ગુણે છે) |
| Rotation | x' = x cos t - y sin t, y' = x sin t + y cos t | મૂળબિંદુની આસપાસ ફેરવે (sin, cos વાપરે) |
Formula
Homogeneous coordinates ત્રણેયને એક કરે છે
એક અગવડ છે: scaling અને rotation ગુણાકાર છે (matrix ના ગુણાકાર), પણ translation સરવાળો છે, એટલે એ ત્રણેય એકસરખી રીતે ભેગાં થતાં નથી. Homogeneous coordinates આ સુધારી આપે છે: બિંદુ (x, y) ને (x, y, 1) તરીકે લખો અને 3 ગુણ્યા 3 matrices વાપરો. હવે translation પણ matrix નો ગુણાકાર બની જાય છે:
Translation: હરોળો [1 0 tx] [0 1 ty] [0 0 1]
Scaling: હરોળો [sx 0 0] [0 sy 0] [0 0 1]
Rotation: હરોળો [cos t, -sin t, 0] [sin t, cos t, 0] [0 0 1]
ત્રણેય matrices હોવાથી તમે એમની matrices ને ગુણીને transformations ને એકમાં ભેગાં કરી શકો છો, અને કાર્યક્ષમ graphics ની ચાવી એ જ છે.
Quiz
બિંદુ (2, 3) ને મૂળબિંદુની આસપાસ 90 અંશે ફેરવતાં (cos 90 = 0, sin 90 = 1) કયું નવું બિંદુ મળે?
- (2, 3), એટલે કે કશો ફેર નહીં
- (-3, 2), કારણ કે x' = 2(0) - 3(1) = -3 અને y' = 2(1) + 3(0) = 2
- (3, 2), એટલે કે યામ અદલાબદલી કરીને
- (5, 5), એટલે કે એમને ઉમેરીને
Show the answer
(-3, 2), કારણ કે x' = 2(0) - 3(1) = -3 અને y' = 2(1) + 3(0) = 2
Rotation નાં સૂત્રોમાં cos 90 = 0 અને sin 90 = 1 મૂકો: x' = x cos t - y sin t = 2(0) - 3(1) = -3, અને y' = x sin t + y cos t = 2(1) + 3(0) = 2, એટલે મળે (-3, 2). વિકલ્પ A ખોટો છે: 90 અંશનું rotation બિંદુને ચોક્કસ બદલે જ છે. વિકલ્પ C, એટલે કે (3, 2), ફક્ત યામ અદલાબદલી કરે છે, જે y = x ની આસપાસનું પરાવર્તન છે, rotation નહીં (અહીં rotation ચિહ્નનો ફેરફાર પણ લાવે છે). વિકલ્પ D યામ ઉમેરે છે, જેનો rotation સાથે સંબંધ જ નથી. 90 અંશે cos અને sin ની કિંમતો સૂત્રોમાં ધ્યાનથી મૂકો, એટલે (2,3) ફરીને (-3,2) થાય છે.
Think first
એક વધારાનું પરિમાણ લેવા છતાં homogeneous coordinates કેમ ફાયદાનાં?
'1' ઉમેરવું અને 3x3 matrices વાપરવી એ વધારાની મહેનત લાગે છે. તો પણ એ મોટી જીત કેમ છે? વિચારીને પછી tap કરો.
Show the answer
કારણ કે એ translation સહિત બધાં transformations ને matrix ના ગુણાકાર માં ફેરવી નાખે છે, અને એનો અર્થ એ કે તમે transformations ના કોઈ પણ ક્રમને એક જ matrix માં ભેગો કરી શકો છો, જે કાર્યક્ષમતા તથા સરળતાની ભારે કમાણી છે.
Homogeneous coordinates વગર scaling અને rotation matrix ના ગુણાકાર છે, પણ translation સરવાળો છે, એટલે transformation 'ગુણો પછી ઉમેરો' નું મિશ્રણ બની જાય છે; અને કેટલાંક ભેગાં કરવાં હોય (પહેલાં scale, પછી rotate, પછી ખસેડવું) એટલે ક્રમમાં જુદા જુદા પ્રકારની ક્રિયાઓ સંભાળવી પડે, જે અગવડભર્યું અને ભૂલપ્રવણ છે.
Homogeneous coordinates દરેક transformation ને એક જ પાયા પર મૂકે છે: બિંદુને (x, y, 1) તરીકે લખીને અને 3x3 matrices વાપરીને translation પણ શુદ્ધ matrix નો ગુણાકાર બની જાય છે.
હવે જાદુ: એ બધાં matrices હોવાથી તમે આખા ક્રમની matrices ને પહેલાં એકબીજા સાથે ગુણી શકો છો, જેમાંથી એક જ ભેગી 3x3 matrix મળે છે જે આખો ક્રમ પકડી લે છે. પછી તમે એ એક જ matrix આકારના દરેક બિંદુ પર લગાડો છો, એટલે બિંદુ દીઠ એક જ ગુણાકાર, બદલે એના કે દરેક transformation અલગ અલગ લગાડવું.
હજારો બિંદુવાળા આકાર માટે, કે સેકંડમાં અનેક વાર ફરી દોરાતા દૃશ્ય માટે, આ પ્રચંડ રીતે વધુ ઝડપી છે: તમે એક matrix પહેલેથી ગણી લો છો અને ફરી ફરી વાપરો છો. એનાથી ગણિત ચોખ્ખું અને એકસરખું પણ બને છે; બિંદુને transform કરવું એટલે હંમેશા 'matrix વડે ગુણો', અને ભેગાં કરેલાં transformations વિશે વિચારવું એટલે matrix નું બીજગણિત.
એટલે જ લગભગ બધી ખરી graphics systems (2D અને 3D) અંદરખાને homogeneous coordinates વાપરે છે; વધારાનો એ એક યામ પોતાની કિંમત અનેકગણી વસૂલ કરી આપે છે. એકસરખી matrices તમને transformations ને ગુણાકારથી ભેગાં કરવા દે છે, અને આખો મુદ્દો એ જ છે.
Summary
Key takeaways
- ભૌમિતિક transformations (x, y) ને (x', y') માં ફેરવીને આકારોને ખસેડે છે, નાનામોટા કરે છે અને ફેરવે છે.
- Translation ઉમેરીને ખસેડે છે: x' = x + tx, y' = y + ty; (2,3) ને (5,-1) જેટલું ખસેડતાં મળે (7,2).
- Scaling મૂળબિંદુની આસપાસ ગુણીને માપ બદલે છે: x' = x ગુણ્યા sx, y' = y ગુણ્યા sy; (2,3) ને (2,2) વડે scale કરતાં મળે (4,6).
- મૂળબિંદુની આસપાસનું rotation sin અને cos વાપરે છે: x' = x cos t - y sin t, y' = x sin t + y cos t; (2,3) ને 90 અંશે ફેરવતાં મળે (-3,2).
- Homogeneous coordinates (x,y) ને (x,y,1) તરીકે લખે છે અને 3x3 matrices વાપરે છે, એટલે translation પણ matrix નો ગુણાકાર બની જાય છે.
- બધાં transformations matrices હોવાથી તમે એમની matrices ને ગુણીને આખો ક્રમ એકમાં ભેગો કરી શકો છો.
- યાદ રાખવાની કડી: translate ઉમેરે, scale ગુણે, rotate sin અને cos વાપરે; અને homogeneous coordinates ત્રણેયને matrices બનાવી દે.