કમ્પ્યુટર ભૂમિતિમાં વણાંકો અને સપાટીઓ, II. ખાસ અને સામાન્ય કેસો

અત્યાર સુધી આપણે આપેલ બિંદુઓના સમૂહ દ્વારા વળાંક કેવી રીતે દોરવો તેની ચર્ચા કરી છે. ઘણા કિસ્સાઓમાં ગણવામાં પદ્ધતિઓ આપે છે ઉત્તમ પરિણામોઅને ફોર્મનું વર્ણન કરતી વખતે ખાસ કરીને અનુકૂળ હોય છે, જેનો આધાર પ્રયોગો અથવા ગાણિતિક ગણતરીઓ દ્વારા મેળવવામાં આવે છે. આ, ઉદાહરણ તરીકે, વિમાનની પાંખ, એન્જિનના ઘટકો, યાંત્રિક અને માળખાકીય ભાગો છે. જો કે, સમસ્યાઓનો બીજો વર્ગ છે જ્યાં ઉકેલ કાર્યાત્મક અને સૌંદર્યલક્ષી બંને જરૂરિયાતો પર આધાર રાખે છે, ઉદાહરણ તરીકે, કારની સપાટીની ડિઝાઇન, વિમાનના ફ્યુઝલેજ, વહાણનો આકાર, ફર્નિચર અથવા વાસણો. માત્રાત્મક માપદંડ ઉપરાંત, તે ધ્યાનમાં લેવું જરૂરી છે વ્યવહારુ અનુભવ, અને ઇન્ટરેક્ટિવ ડેવલપર હસ્તક્ષેપ ઘણીવાર જરૂરી છે.

ઉપર ચર્ચા કરેલ પદ્ધતિઓ, ખાસ કરીને ક્યુબિક સ્પ્લાઇન્સ માટે, અસુવિધાજનક છે ઇન્ટરેક્ટિવ કાર્ય. સ્પર્શકોની દિશા અને તીવ્રતા વળાંકની જરૂરી સાહજિક સમજ પૂરી પાડતી નથી, કારણ કે સંખ્યાઓના સમૂહ અને અનુરૂપ વળાંકના આકાર વચ્ચેનું જોડાણ સ્પષ્ટ નથી.

પિયર બેઝિયરે કોઈપણ આકારના વણાંકો અને સપાટીઓ બનાવવા માટે બીજી પદ્ધતિનો પ્રસ્તાવ મૂક્યો. બેઝિયરે તેમની પદ્ધતિનો ગાણિતિક આધાર ભૌમિતિક વિચારણાઓમાંથી મેળવ્યો હતો - પરંતુ તેમની કૃતિઓમાં એવું દર્શાવવામાં આવ્યું હતું કે તેમનું પરિણામ બર્નસ્ટેઈન આધાર અથવા બહુપદીના અંદાજ કાર્યની સમકક્ષ છે.

ચોખા. 5-25 બેઝિયર વળાંક અને તેના નિર્ધારિત બિંદુઓ.

બેઝિયર વળાંકને બહુકોણ દ્વારા વ્યાખ્યાયિત કરવામાં આવે છે, જેમ કે ફિગમાં બતાવ્યા પ્રમાણે. 5-25. બેઝિયરનો આધાર બર્નસ્ટેઇન હોવાથી, બેઝિયર વણાંકોના કેટલાક ગુણધર્મો તરત જ જાણી શકાય છે. ઉદાહરણ તરીકે:

આધાર કાર્યો વાસ્તવિક છે.

વળાંકના વિભાગને વ્યાખ્યાયિત કરતી બહુપદીની ડિગ્રી અનુરૂપ બહુકોણના બિંદુઓની સંખ્યા કરતાં એક ઓછી છે.

વળાંક આકારનો આધાર બહુકોણની રૂપરેખાને અનુસરે છે.

વળાંકના પ્રથમ અને છેલ્લા બિંદુઓ વ્યાખ્યાયિત બહુકોણના અનુરૂપ બિંદુઓ સાથે સુસંગત છે.

વળાંકના છેડા પરના સ્પર્શક વેક્ટર બહુકોણની પ્રથમ અને છેલ્લી બાજુઓ સાથે દિશામાં એકરૂપ થાય છે.

વક્ર બહુકોણના બહિર્મુખ હલની અંદર આવેલું છે, એટલે કે, સૌથી મોટા બહુકોણની અંદર આપેલ પોઈન્ટ. ફિગ માં. 5-25 બહિર્મુખ હલ ડૅશ્ડ અને પાતળી રેખાઓ દ્વારા સૂચવવામાં આવે છે.

વળાંકમાં વિવિધતા ઘટાડવાની મિલકત છે. આનો અર્થ એ છે કે વળાંક વ્યાખ્યાયિત બહુકોણ કરતાં વધુ વખત કોઈપણ સીધી રેખાને છેદે છે. વળાંક એફાઈન રૂપાંતરણ હેઠળ અપરિવર્તનશીલ છે.

ફિગ માં. આકૃતિ 5-26 કેટલાક ચાર-બિંદુ બેઝિયર બહુકોણ અને અનુરૂપ વળાંકો દર્શાવે છે. ઉપર સૂચિબદ્ધ ગુણધર્મોના આધારે, તમે બહુકોણના આકારના આધારે વળાંકના આકારની આગાહી કરવાનું સરળતાથી શીખી શકો છો.

બેઝિયર વળાંકની ગાણિતિક પેરામેટ્રિક રજૂઆત છે

, , (5-62)

બેઝિયર અથવા બર્નસ્ટીન આધાર ક્યાં છે, અથવા અંદાજિત કાર્ય

(5-63)

(5-64)

આ ઓર્ડરનું બર્નસ્ટીન આધાર કાર્ય છે.

ચોખા. ઘન વણાંકો માટે 5-26 બેઝિયર બહુકોણ.

અહીં, બર્નસ્ટીન આધારના વ્યાખ્યાયિત કાર્યનો ક્રમ - અને તેથી, બહુપદી વક્રનો ખંડ, વ્યાખ્યાયિત બહુકોણના બિંદુઓની સંખ્યા કરતા એક ઓછો છે. ફિગ માં બતાવ્યા પ્રમાણે. 5-25, બેઝિયર બહુકોણના શિરોબિંદુઓ 0 થી . તેથી અને.

ફિગ માં. 5-27 માટે અંદાજિત કાર્યો બતાવે છે વિવિધ અર્થો. નોંધ કરો કે કાર્યો સપ્રમાણ છે. દરેક ફંક્શનનો ઓર્ડર હોય છે, ઉદાહરણ તરીકે ફિગમાં તમામ ચાર ફંક્શન. ઘન માટે 5-27b. દરેક ફંક્શનની મહત્તમ પ્રાપ્ત થાય છે અને તેની બરાબર છે (5-14)

. (5-65)

ચોખા. 5-27 બેઝિયર/બર્નસ્ટીન વેઇટીંગ ફંક્શન્સ. (a) ત્રણ-બિંદુ બહુકોણ, ; (b) ચાર મુદ્દાઓથી, ; (c) પાંચ મુદ્દાઓમાંથી, ; (d) છ બિંદુઓથી, .

ઉદાહરણ તરીકે, ઘન વળાંક માટે. મહત્તમ અને અનુક્રમે અને પર પ્રાપ્ત થાય છે, અને તેના મૂલ્યો છે

આકૃતિ 5-27b આ ઉદાહરણને સમજાવે છે.

વળાંક પરના પ્રથમ બિંદુ માટે સમીકરણો (5-62) અને (5-64) ધ્યાનમાં લો, એટલે કે. ખાતે

, ,

, .

,

વળાંકનો પ્રથમ બિંદુ બહુકોણના પ્રથમ બિંદુ સાથે એકરુપ છે.

એ જ રીતે, વળાંકના છેલ્લા બિંદુ માટે, એટલે કે મુ

, ,

, .

અને બેઝિયર વળાંક પરનો છેલ્લો બિંદુ વ્યાખ્યાયિત બહુકોણના છેલ્લા બિંદુ સાથે એકરુપ છે.

ચાલો ઉદાહરણનો ઉપયોગ કરીને બેઝિયર બાંધકામ પદ્ધતિ જોઈએ.

ઉદાહરણ 5-7 બેઝિયર કર્વ

બેઝિયર બહુકોણના શિરોબિંદુઓ આપવા દો: , , અને . બેઝિયર વળાંક પર પડેલા સાત બિંદુઓ શોધો.

સમીકરણો ધ્યાનમાં લો (5-62) - (5-64):

,

.

અમારા કિસ્સામાં, કારણ કે ત્યાં ચાર શિરોબિંદુઓ છે. અહીંથી

,

,

બેઝિયર વળાંક માટે કોષ્ટક 5-4 ગુણાંક

ચોખા. 5-28 બેઝિયર કર્વ સેગમેન્ટ, ઉદાહરણ 5-7.

માટેના મૂલ્યો વિવિધ અર્થોકોષ્ટકમાં આપવામાં આવે છે. 5-4.

વળાંક પરના બિંદુઓ:

,

.

આ બિંદુઓ ફિગમાં નિર્ધારિત બહુકોણ પર દર્શાવવામાં આવ્યા છે. 5-28.

બેઝિયર વક્ર સમીકરણ આમાં લખી શકાય છે મેટ્રિક્સ ફોર્મમાટેના સમીકરણોની જેમ ક્યુબિક સ્પ્લાઇન્સઅને પેરાબોલિક ઇન્ટરપોલેશન (જુઓ સમીકરણો 5-27 અને 5-44):

અહીં અને .

ખાસ રસ નાના મૂલ્યો માટે મેટ્રિક્સ સ્વરૂપો છે. ચાર-બિંદુ બહુકોણ માટે, બેઝિયર વળાંક જેવો દેખાય છે

.

ગુણાંકને જૂથબદ્ધ કરીને, આપણને મળે છે

. (5-68)

એ જ રીતે, ચોથો ક્રમ બેઝિયર વળાંક, બહુકોણ દ્વારા આપવામાં આવે છેપાંચ બિંદુઓથી:

. (5-69)

કાર્ય સામાન્યકૃત રજૂઆત પ્રદાન કરે છે:

,

,

. (5-70)

મેટ્રિક્સ ફરીથી અહીં છે . મેટ્રિક્સના વ્યક્તિગત સભ્યો છે:

.

સમીકરણ (5-70) વધુ અનુકૂળ સ્વરૂપમાં લખી શકાય છે

,

.

સમીકરણો (5-70) અથવા (5-71) જ્યારે ગણતરી માટે વધુ અનુકૂળ હોય છે મોટા મૂલ્યો. નોંધ કરો કે બધા માટે, મેટ્રિક્સ મુખ્ય કર્ણ વિશે સપ્રમાણ છે અને નીચલા જમણા ખૂણે શૂન્યનો સમાવેશ થાય છે.

દરેક વ્યક્તિગત બેઝિયર વક્ર માટે, તેના છેડા પરના સ્પર્શક વેક્ટરને જાણવું જરૂરી નથી, પરંતુ જો વળાંકોના જોડાણના બિંદુઓ પર વક્રતા અને ઢોળાવની સાતત્ય જાળવવી જરૂરી હોય તો, પ્રકાશ માટે સપાટી પર સામાન્યની ગણતરી કરવા માટે, ગણતરી કરવા માટે. સ્થાનિક વક્રતા, પછી બેઝિયર વળાંકના પ્રથમ અને બીજા બંને ડેરિવેટિવ્સને જાણવાની જરૂર છે.

સમીકરણ (5-62) થી, બેઝિયર વળાંકનું પ્રથમ વ્યુત્પન્ન છે:

. (5-72)

બીજું વ્યુત્પન્ન છે:

. (5-73)

ઔપચારિક રીતે વિભેદક સમીકરણ (5-63), અમે આધાર કાર્યોના ડેરિવેટિવ્સ મેળવીએ છીએ

. (5-74)

એ જ રીતે, બીજા ડેરિવેટિવ્ઝનું સ્વરૂપ છે:

. (5-75)

બેઝિયર વળાંકની શરૂઆતમાં અને અંતમાં, એટલે કે. પર અને , સમીકરણો (5-74) અને (5-75) ની સંખ્યાત્મક ગણતરી મુશ્કેલ છે.

અહીંથી વ્યુત્પન્નની ગણતરી કરવાની બીજી રીત:

(5-76)

. (5-77)

તેથી છેડે પ્રથમ ડેરિવેટિવ્ઝ હશે

(5-78)

. (5-79)

આ બતાવે છે કે બેઝિયર વળાંકની સ્પર્શક પ્રથમ અને છેલ્લા બિંદુઓબહુકોણની અનુરૂપ બાજુઓની સમાંતર. તેવી જ રીતે, છેડે બીજા ડેરિવેટિવ્ઝ છે:

છેડે બીજા ડેરિવેટિવ્સ બે નજીકની બાજુઓ પર આધારિત છે, એટલે કે ત્રણ નજીકના શિરોબિંદુઓ પર. સામાન્ય રીતે, શરૂઆત અને અંતિમ બિંદુઓ પર -th વ્યુત્પન્ન આ બિંદુઓ અને બહુકોણના નજીકના શિરોબિંદુઓ પર આધાર રાખે છે.

ચાલો એક ઉદાહરણનો ઉપયોગ કરીને આને વધુ વિગતવાર જોઈએ.

બેઝિયર કર્વ્સના 5-8 ડેરિવેટિવ્ઝનું ઉદાહરણ

ચાર-પોઇન્ટ બેઝિયર બહુકોણને ધ્યાનમાં લો, ઉદાહરણ તરીકે, ફિગમાં. 5-26 અને 5-28. ચાલો વળાંકની રજૂઆતને યાદ કરીએ

તેથી પ્રથમ વ્યુત્પન્ન

ચાલો ઉદાહરણ 5-7 યાદ કરીએ અને સીધો આધાર ફંક્શનને અલગ કરીએ

ચાલો અવેજી કરીએ:

અવેજી આપે છે

તેથી, વળાંકની શરૂઆતમાં સ્પર્શકની દિશા બહુકોણની પ્રથમ બાજુ સાથે એકરુપ છે (જુઓ આકૃતિ 5-28).

વળાંકના અંતે અને

તેવી જ રીતે, અવેજી આપે છે

અને વળાંકના અંતે સ્પર્શક વેક્ટરની દિશા બહુકોણની છેલ્લી બાજુ સાથે એકરુપ છે.

વળાંક સાથે ડેરિવેટિવ્સની ગણતરી કરવા માટે, અમે આધારભૂત કાર્યો અને સમીકરણો (5-74) અને (5-75) નો ઉપયોગ કરીએ છીએ:

,

,

.

પરિણામો બંને માટે સરળતાથી ગણવામાં આવે છે. સમીકરણ (5-72) માં બદલીને, અમે વળાંક પર કોઈપણ બિંદુએ પ્રથમ વ્યુત્પન્ન મેળવીએ છીએ. ઉદાહરણ તરીકે, જ્યારે આપણી પાસે હોય

પોઈન્ટ માટેનું પરિણામ , , , ઉદાહરણ 5-7 થી ફિગમાં બતાવવામાં આવ્યું છે. 5-29.

ચોખા. 5-29 બેઝિયર કર્વ અને તેના ડેરિવેટિવ્ઝ: ;

; .

,

,

,

.

એ જ રીતે, બીજા ડેરિવેટિવ્ઝનું સ્વરૂપ છે:

સમીકરણ (5-73) આપે છે

ફિગમાં એક ઉદાહરણ પણ બતાવવામાં આવ્યું છે.

,

5-29. નોંધ કરો કે મૂળથી દરેક વક્ર પરના કોઈપણ બિંદુ સુધીનો વેક્ટર અનુક્રમે ત્રિજ્યા વેક્ટરની દિશા અને તીવ્રતા અને વળાંક પરના તે બિંદુ પર અંદાજિત વક્રતા દર્શાવે છે.

અડીને બેઝિયર વણાંકોની સાતત્ય માટેની સ્થિતિ ખૂબ જ સરળ રીતે ઘડવામાં આવી છે. ડિગ્રીના બેઝિયર વળાંકને શિરોબિંદુઓ દ્વારા નિર્દિષ્ટ કરવા દો, અને ડિગ્રીના નજીકના બેઝિયર વળાંકને શિરોબિંદુઓ દ્વારા વ્યાખ્યાયિત કરવા દો. પછી જોડાણ બિંદુ પર પ્રથમ વ્યુત્પન્નની સાતત્ય સંબંધ દ્વારા વ્યક્ત કરવામાં આવે છે

સ્કેલર ક્યાં છે.

.

ચોખા. 5-30 ક્યુબિક બેઝિયર વણાંકો માટે પ્રથમ વ્યુત્પન્નની સાતત્ય.

.

સમીકરણો (5-78) અને (5-79) નો ઉપયોગ કરીને, આપણે મેળવીએ છીએ

વળાંકની સાતત્યથી તે તેને અનુસરે છે

આથી, જો ત્રણ શિરોબિંદુઓ , , સમરેખા હોય તો જંકશન પરના સ્પર્શકોની દિશાઓ એકરૂપ થાય છે, એટલે કે. અને વચ્ચેની રેખા પર સૂવું જોઈએ.

જો સ્પર્શક વેક્ટરના મૂલ્યો પણ એકરૂપ થાય છે, તો પછી સેગમેન્ટનો મધ્યબિંદુ છે:

જંકશન પર સાતત્ય જાળવી રાખવા માટે કાં તો બહિર્મુખ બહુકોણ બનાવવું જોઈએ અથવા સીધી રેખા પર સૂવું જોઈએ.

ચોખા. 5-31 ચોથા ડિગ્રીના બેઝિયર વણાંકો માટે બીજા વ્યુત્પન્નનું સાતત્ય. ક્યુબિક બેઝિયર વણાંકો માટે આ સ્થિતિનું સ્વરૂપ છેકાગળ પરના થોડા પેન્સિલ સ્કેચ તે બતાવશે આ જરૂરિયાતવણાંકોના સમૂહને નોંધપાત્ર રીતે મર્યાદિત કરે છે; તેથી, વ્યવહારમાં, બીજા ડેરિવેટિવ્ઝની સાતત્ય જાળવવા માટે, બહુપદી વણાંકો કરતાં વધુ

,

ઉચ્ચ ક્રમ . ફિગ માં. આકૃતિ 5-31 બે પાંચ-બિંદુ બેઝિયર વણાંકો માટે બીજા ડેરિવેટિવ્ઝની સાતત્યનું ઉદાહરણ બતાવે છે.અહીં તમે કાર્યમાંથી તકનીકને સફળતાપૂર્વક લાગુ કરી શકો છો. મર્યાદિત કિસ્સામાં, બહુકોણ વળાંકમાં ફેરવાય છે. બેઝિયર વળાંકને બે નવામાં વિભાજીત કરીને વધારાની વળાંકની લવચીકતા પણ મેળવી શકાય છે જેથી કરીને તેઓ મૂળ વળાંક સાથે એકરૂપ થાય. બાર્સ્કીના કાર્ય દર્શાવે છે કે કોઈપણ બેઝિયર વળાંકને શ્રેણીમાં મનસ્વી પરિમાણનો ઉપયોગ કરીને વિભાજિત કરી શકાય છે. સૌથી સરળ કેસ- આ મધ્યબિંદુ છે, એટલે કે. (સે.મી.). જ્યારે મધ્યબિંદુથી વિભાજિત થાય છે, ત્યારે તમને બે મળે છે

ખાસ પ્રકારો

ક્યુબિક બેઝિયર વણાંકો. ક્યુબિક બેઝિયર વળાંક (વ્યાયામ 5-7 જુઓ) તરીકે આપવામાં આવે છે

પર ત્રિજ્યા વેક્ટર અને ટેન્જેન્ટ વેક્ટરને સમાન કરીને મેળવે છે

કૂન્સ બાયક્યુબિક સપાટીઓ સપાટી ડિઝાઇન માટે લવચીક અને શક્તિશાળી સાધન પ્રદાન કરે છે. જો કે, તેમનો વ્યવહારુ ઉપયોગ, જેમ કે ક્યુબિક સ્પલાઇન વક્ર માટે, ચોક્કસ, સાહજિક રીતે બિન-સ્પષ્ટ ગાણિતિક માહિતી, જેમ કે બિંદુઓના કોઓર્ડિનેટ્સ, ટેન્જેન્ટ વેક્ટર અને ટોર્સિયન વેક્ટરનો ઉલ્લેખ કરવાની જરૂરિયાત દ્વારા અવરોધાય છે.

ચોખા. 6-36 બિન-ચતુષ્કોણીય ટુકડાઓ. (a) પંચકોણીય; (b) ત્રિકોણાકાર.

જે સમસ્યાઓ ઊભી થાય છે તે આકૃતિ 6-33-6-35 માં દર્શાવવામાં આવી છે. આમાંની મોટાભાગની સમસ્યાઓ બેઝિયર વણાંકોની વિભાવનાઓને સપાટી પર વિસ્તારીને દૂર કરી શકાય છે.

બેઝિયર સપાટીના કાર્ટેશિયન અથવા ટેન્સર ઉત્પાદન તરીકે આપવામાં આવે છે

, (6-58)

પેરામેટ્રિક દિશાઓમાં બર્નસ્ટેઇન બેઝિસ ફંક્શન ક્યાં અને છે અને (જુઓ સમીકરણો 5-63 અને 5-64). સગવડ માટે, અમે વિભાગમાં અગાઉ આપેલી વ્યાખ્યાનું પુનરાવર્તન કરીએ છીએ. 5-8

, (5-63)

,

. (6-64)

અહીં તત્વો એ વ્યાખ્યાયિત બહુકોણીય જાળીના શિરોબિંદુઓ છે, જેમ કે ફિગમાં બતાવ્યા પ્રમાણે. 6-37. સૂચકાંકો અને અનુક્રમે દિશામાં અને , બહુહેડ્રોનના શિરોબિંદુઓની સંખ્યા કરતા એક ઓછા છે. સપાટીના ચાર-બાજુવાળા ટુકડાઓ માટે, નિર્ધારિત બહુકોણીય જાળી ટોપોલોજિકલ રીતે લંબચોરસ હોવી જોઈએ, એટલે કે, દરેક "પંક્તિ" માં તેના શિરોબિંદુઓની સમાન સંખ્યા હોવી આવશ્યક છે.

ફરીથી, બેઝિયર વણાંકોની જેમ, કારણ કે મિશ્રણ કાર્યો બર્નસ્ટીન આધારનો ઉપયોગ કરે છે, સપાટીના ઘણા ગુણધર્મો જાણીતા છે. ઉદાહરણ તરીકે:

એકમ દીઠ દરેક પેરામેટ્રિક દિશામાં સપાટીની ડિગ્રી ઓછી સંખ્યાઆ દિશામાં સંદર્ભ પોલિહેડ્રોનના શિરોબિંદુઓ.

ચોખા. 6-37 લાક્ષણિક પોલિહેડ્રોનની બેઝિયર સપાટી અને શિરોબિંદુઓ.

ચોખા. 6-38 બેઝિયર સપાટી માટે નિર્ધારિત બહુકોણીય જાળીની યોજના.

દરેક પેરામેટ્રિક દિશામાં સપાટીની સરળતા આ દિશામાં નિર્ધારિત પોલિહેડ્રોનના શિરોબિંદુઓની સંખ્યા કરતા બે એકમો ઓછી છે. માં સપાટી પ્રદર્શિત થાય છે સામાન્ય દૃશ્યવ્યાખ્યાયિત બહુકોણીય જાળીનો આકાર. વ્યાખ્યાયિત બહુકોણીય જાળી અને સપાટીના ફક્ત ખૂણાના બિંદુઓ એકરૂપ થાય છે.

સપાટી વ્યાખ્યાયિત બહુકોણ જાળીના બહિર્મુખ હલની અંદર સમાયેલ છે.

સપાટી ફેરફાર ભીનાશક ગુણધર્મો પ્રદર્શિત કરતી નથી. આ ગુણધર્મ બે ચલોની સપાટીઓ માટે અવ્યાખ્યાયિત અને અજ્ઞાત છે.

એફિન ટ્રાન્સફોર્મેશન હેઠળ સપાટી અપરિવર્તનશીલ છે.

બેઝિયર સપાટીના દરેક સીમા વણાંકો બેઝિયર વક્ર છે. ચાલો આ હકીકતને યાદ રાખીએ અને ફિગમાં યોજનાકીય રીતે બતાવેલ કદની બાયક્યુબિક બેઝિયર સપાટી માટે વ્યાખ્યાયિત બહુકોણીય જાળીનો વિચાર કરીએ. 6-38. તે જોવાનું સરળ છે કે ભાગના ખૂણાના બિંદુઓ પર સ્પર્શ વેક્ટરની દિશા અને તીવ્રતા જાળીની બાજુઓ સાથેના પડોશી બિંદુઓની સ્થિતિ દ્વારા નિયંત્રિત થાય છે. જેમ કે, એક બિંદુ પર દિશાઓમાં સ્પર્શક વેક્ટર અનુક્રમે બહુકોણ જાળીના શિરોબિંદુઓ અને , દ્વારા નિયંત્રિત થાય છે. એ જ રીતે, બહુકોણ મેશ શિરોબિંદુઓ , , , અને , અનુક્રમે ખૂણાના બિંદુઓ પર સ્પર્શ વેક્ટરને નિયંત્રિત કરે છે. બહુકોણીય જાળીના ચાર આંતરિક શિરોબિંદુઓ, , , અને સપાટીના ભાગના ખૂણાના બિંદુઓ પર ટોર્સિયન વેક્ટર્સની દિશા અને તીવ્રતાને પ્રભાવિત કરે છે. પરિણામે, વપરાશકર્તા સ્પર્શક અને ટોર્સિયન વેક્ટરના ચોક્કસ મૂલ્યોને જાણ્યા વિના સપાટીના ટુકડાના આકારને નિયંત્રિત કરી શકે છે.

ફિગ માં. આકૃતિ 6-39 અનેક બાયક્યુબિક બેઝિયર સપાટીઓ અને તેમની વ્યાખ્યાયિત બહુકોણ જાળી દર્શાવે છે. બેઝ પોલીકોન મેશ , પર સ્થિત ખૂણાના બિંદુઓ સાથે મૂળની આસપાસ કદનું અને કેન્દ્રિત છે. ખૂણાના શિરોબિંદુઓ પરનો ઘટક શૂન્ય છે. અન્ય તમામ શિરોબિંદુઓ માટે આ ઘટક પાંચ બરાબર છે. મૂળભૂત બહુકોણીય જાળી અને તેની અનુરૂપ બેઝિયર સપાટી ફિગમાં બતાવવામાં આવી છે. 6-39 એ. ફિગ માં. 6-39 બિંદુ એ ડાબો ખૂણો શિરોબિંદુ છે, અને જમણો ખૂણો શિરોબિંદુ છે. નોંધ કરો કે પાયાના બહુકોણ મેશના કેન્દ્રિય શિરોબિંદુઓ સપાટ ક્રોસ બનાવે છે (શેડમાં બતાવેલ). પરિણામે, પરિણામી સપાટીનું કેન્દ્ર સપાટ ન હોવા છતાં, ઓછામાં ઓછું વળેલું છે.

ફિગ માં. આકૃતિ 6-39b બંને પેરામેટ્રિક દિશામાં અને બિંદુઓને ખસેડીને સ્પર્શ વેક્ટરની તીવ્રતા બમણી કરવાની અસરને સમજાવે છે. ટોર્સિયન વેક્ટર બદલાતું નથી. ચાલો પરિમાણોના મૂલ્યોને અનુરૂપ સીમા વણાંકોની વક્રતામાં વધારો અને સપાટીના આંતરિક ભાગમાં અનુરૂપ ફેરફારની નોંધ લઈએ.

ફિગ માં. આકૃતિ 6-39c બંને પેરામેટ્રિક દિશામાં અને બિંદુઓને ખસેડીને સ્પર્શ વેક્ટરની દિશા બદલવાની અસર દર્શાવે છે. ચાલો બિંદુની નજીકના બાઉન્ડ્રી વળાંકના વક્રતાના સંકેત અને પાયાની સપાટીની તુલનામાં સપાટીના આંતરિક ભાગના આકારમાં ફેરફારની નોંધ લઈએ.

ફિગ માં. આકૃતિ 6-39d તેની દિશા બદલ્યા વિના એક બિંદુ પર ટોર્સિયન વેક્ટરની તીવ્રતા બમણી કરવાના પરિણામને દર્શાવે છે. આ કિસ્સામાં, માત્ર બિંદુ ખસેડવામાં આવે છે. આ ફેરફારની અસર સૂક્ષ્મ છે, પરંતુ તેમ છતાં ડિઝાઇન માટે મહત્વપૂર્ણ છે. ફિગ માં આધાર સપાટી સાથે કાળજીપૂર્વક સરખામણી. 6-39a દર્શાવે છે કે પેરામેટ્રિક રેખાઓબિંદુની નજીક તેઓ વધુ વક્રતા ધરાવે છે. આ અસર સપાટીના લગભગ કેન્દ્ર સુધી વિસ્તરે છે.

મેટ્રિક્સ સ્વરૂપમાં, બેઝિયર સપાટીનું કાર્ટેશિયન ઉત્પાદન અભિવ્યક્તિ દ્વારા આપવામાં આવે છે

,

,

,

અને મેટ્રિસિસ સમીકરણ (5-70) અથવા (5-71) દ્વારા આપવામાં આવે છે.

ચોખા. 6-39 બાયક્યુબિક બેઝિયર સપાટીઓ. (a) મુખ્ય સપાટી; (b) માં બંને સ્પર્શક વેક્ટરની તીવ્રતા બદલવાની અસર; (c) માં સ્પર્શક વેક્ટરની દિશા બદલવાની અસર; (d) માં ટોર્સિયન વેક્ટરની તીવ્રતા બદલવાની અસર.

કદના બાયક્યુબિક બેઝિયર સપાટીના વિશિષ્ટ કેસ માટે, સમીકરણ (6-59) ઘટે છે

. (6-60)

બેઝિયર સપાટી ચોરસ હોવી જરૂરી નથી. ગ્રીડ માપ માટે, સમીકરણ (6-59) બને છે

. (6-61)

કદની બેઝિયર સપાટી પેરામેટ્રિક દિશામાં ચોથા-ડિગ્રી બહુપદી વણાંકો અને દિશામાં ચતુર્ભુજ બહુપદી વણાંકો ધરાવે છે. આવી બેઝિયર સપાટીનું ઉદાહરણ ફિગમાં બતાવવામાં આવ્યું છે. 6-40. IN આ કિસ્સામાં, ફિગ માં બતાવ્યા પ્રમાણે. 6-40b, પાંચ-શિરોબિંદુ મેશની બાજુના મધ્ય શિરોબિંદુને બદલવાથી ખૂણાના બિંદુઓ પરના સ્પર્શક વેક્ટરને અસર થતી નથી.

ચોખા. 6-40 બેઝિયર સપાટીનું કદ. (a) મુખ્ય સપાટી; (b) પાંચ શિરોબિંદુઓ સાથે બાઉન્ડ્રી પોલિલાઇનના કેન્દ્રિય શિરોબિંદુને બદલવાની અસર.

વ્યુત્પન્ન બેઝિયર સપાટીઓ ઔપચારિક રીતે વિભેદક સમીકરણ (6-58) અથવા (6-59) દ્વારા મેળવવામાં આવે છે. જો આપણે સમીકરણ (6-58) નો ઉપયોગ કરીએ, તો પ્રથમ અને બીજા પેરામેટ્રિક ડેરિવેટિવ્સ હશે

, (6-62)

, (6-63)

, (6-64)

, (6-65)

, (6-66)

જ્યાં પ્રાઇમ પેરામેટ્રિક વેરીએબલના સંદર્ભમાં ભિન્નતા દર્શાવે છે. બર્નસ્ટેઇન બેઝિસ ફંક્શનના ડેરિવેટિવ્ઝ, , અને સમીકરણો (5-74) અને (5-75) માં આપવામાં આવ્યા છે.

બાયક્યુબિક બેઝિયર અને કૂન્સ સપાટીઓ વચ્ચેનો સંબંધ શોધવાનું સરળ છે. સમીકરણો (6-52) અને (6-59), આપણને મળે છે

જ્યાં સમીકરણ (5-76) અને - સમીકરણ (5-70) દ્વારા આપવામાં આવે છે. તેથી, બાયક્યુબિક કૂન્સ સપાટીના ભૌમિતિક મેટ્રિક્સને બેઝિયર સપાટીના બહુકોણીય જાળીના સંદર્ભમાં નીચે પ્રમાણે વ્યાખ્યાયિત કરવામાં આવે છે.

. (6-67)

સમીકરણ (6-67) માં નીચલા જમણા કદના સબમેટ્રિક્સની તપાસ પુષ્ટિ કરે છે કે વ્યાખ્યાયિત બહુકોણીય જાળીના ચાર કેન્દ્રિય શિરોબિંદુઓ બાયક્યુબિક બેઝિયર સપાટીના ટુકડાના ખૂણાના બિંદુઓ પર ટોર્સિયનને પ્રભાવિત કરે છે. જો કે, ખૂણાના બિંદુઓ પરના ટોર્સિયનને માત્ર કેન્દ્રિય શિરોબિંદુઓ દ્વારા જ નહીં, પણ નજીકના સ્પર્શક વેક્ટર દ્વારા પણ નિયંત્રિત કરવામાં આવે છે. ખરેખર, ખૂણાના બિંદુ પરનું ટોર્સિયન ખૂણાના બિંદુ, બે અડીને આવેલા સીમા બિંદુઓ અને અડીને આવેલા કેન્દ્ર બિંદુ દ્વારા રચાયેલા નોન-પ્લેનર ચતુષ્કોણના આકાર દ્વારા નિયંત્રિત થાય છે.

સમીકરણો (6-62)-(6-64) પરથી તે અનુસરે છે

. (6-68)

એ જ રીતે, કુન્સ બાયક્યુબિક સપાટીના પરિમાણોના સંદર્ભમાં બેઝિયર બહુકોણીય જાળીના શિરોબિંદુઓને વ્યક્ત કરતા મેટ્રિસિસ અને વચ્ચેનો વ્યસ્ત સંબંધ, બરાબર છે

. (6-69)

બેઝિયર સપાટીનો ખ્યાલ નીચેના ઉદાહરણમાં વધુ સંપૂર્ણ રીતે દર્શાવવામાં આવ્યો છે.

ઉદાહરણ 6-14 બેઝિયર સપાટી

ફિગમાં બતાવેલ એક માટે. 6-39a પેરામીટર મૂલ્યો માટે બેઝિયર સપાટીઓ, સપાટી પરના બિંદુના કોઓર્ડિનેટ્સ અને પ્રથમ ડેરિવેટિવ્ઝ અને દિશાઓ નક્કી કરો. ફિગમાં બતાવેલ સંશોધિત સપાટી માટે બિંદુના કોઓર્ડિનેટ્સ અને ડેરિવેટિવ્ઝ પણ શોધો. 6-39 ડી. પરિણામોની સરખામણી કરો. બેઝિયર સપાટી પોલિહેડ્રોનના શિરોબિંદુઓ છે:. ઉત્પાદનનો નવો અર્થ: અને હજુ પણ ઓર્થોગોનલ છે, પરંતુ તેમની તીવ્રતા અને દિશાઓ બંને અલગ છે. આ પરિણામો દર્શાવે છે કે એક ખૂણાના બિંદુ પર ટોર્સિયન વેક્ટર સમગ્ર સપાટીના આકાર પર સૂક્ષ્મ પરંતુ નોંધપાત્ર અસર કરે છે.

બેઝિયર સપાટીઓની ઉપરની ચર્ચા સપાટીના એક ભાગની વ્યાખ્યા અને લાક્ષણિકતાઓ વિશે હતી. વધુ જટિલ સપાટીઓ મેળવવા માટે, તમારે બેઝિયર સપાટીના કેટલાક ટુકડાઓ ભેગા કરવાની જરૂર છે. આ મુદ્દાની વિગતવાર ચર્ચા આ પુસ્તકના અવકાશની બહાર છે. અમે રસ ધરાવતા વાચકનો સંદર્ભ લઈએ છીએ અને. સ્પર્શ કરતી બાજુઓ સાથે સરળતા સુનિશ્ચિત કરતી વખતે બેઝિયર સપાટીના ટુકડાઓને જોડતી વખતે ઊભી થતી સમસ્યાઓ ફિગમાં દર્શાવવામાં આવી છે. 6-41 બાયક્યુબિક બેઝિયર સપાટીના બે ટુકડાને એક બાજુ સાથે જોડવાના ઉદાહરણનો ઉપયોગ કરીને.

સીમા સાથે સાતત્ય અથવા સરળતા સુનિશ્ચિત કરવા માટે, તે જરૂરી છે કે બે સીમા વણાંકો એકરૂપ થાય, અને તેથી સપાટીની ધાર સાથે બે સીમા તૂટેલી રેખાઓ. ઢોળાવ અથવા સ્પર્શક વેક્ટરની સાતત્યતા અથવા ટુકડાની સીમા સાથે સરળતાની ખાતરી કરવા માટે, બાઉન્ડ્રી વળાંક સાથે સપાટીની સામાન્ય દિશા બંને ટુકડાઓ માટે સમાન હોવી જોઈએ. આ કરવા માટે, તમે બે શરતોનો ઉપયોગ કરી શકો છો. પ્રથમ માટે જરૂરી છે કે ચાર બહુકોણ મેશ સેગમેન્ટ્સ કે જે સીમા પર મળે છે અને તેને છેદે છે તે સમરેખીય હોવા જોઈએ, જેમ કે ફિગમાં પ્રકાશિત રેખાઓ દ્વારા દર્શાવવામાં આવ્યું છે. 6-41 એ. બીજી, ઓછી કડક શરત માટે જરૂરી છે કે બહુકોણ જાળીની માત્ર ત્રણ કિનારીઓ કે જે સીમાના વળાંકના અંતિમ બિંદુઓ પર મળે છે તે કોપ્લાનર હોવી જોઈએ, જેમ કે ફિગમાં પ્રકાશિત રેખાઓ દ્વારા દર્શાવવામાં આવ્યું છે. 6-41 બી.

C# માં પ્રખ્યાત બેઝિયર વણાંકોનું સરળ અને સ્પષ્ટ અમલીકરણ.

પરિચય

બેઝિયર વણાંકો એ સૌથી મૂળભૂત વણાંકો છે, જેનો મુખ્યત્વે ઉપયોગ થાય છે કમ્પ્યુટર ગ્રાફિક્સઅને ઇમેજ પ્રોસેસિંગ. આ વણાંકો મુખ્યત્વે પ્રક્ષેપ, અંદાજ, ટ્રેસિંગ વણાંકો અને વસ્તુઓ દોરવામાં વપરાય છે. આ લેખ ખૂબ જ સરળ અને સ્પષ્ટ રીતે બતાવે છે કે તમે આ વળાંકો કેવી રીતે બનાવી શકો છો અને તેનો ઉપયોગ કરી શકો છો.

સંક્ષિપ્ત માહિતી

બેઝિયર વણાંકો પેરામેટ્રિક વળાંકો છે જે અત્યંત કસ્ટમાઇઝ અને સરળ છે અને ઘણા કાર્યો માટે સારી રીતે કાર્ય કરે છે. તેઓનું નામ પિયર બેઝિયરના નામ પરથી રાખવામાં આવ્યું હતું, ફ્રેન્ચ ગણિતશાસ્ત્રીઅને જે એન્જિનિયરનો વિકાસ થયો આ પદ્ધતિઓટોમોબાઈલ ઉત્પાદક રેનો માટે કામ કરતી વખતે 1960 ના અંતમાં કમ્પ્યુટર ડ્રોઈંગ. એવું કહેવાય છે કે તે જ સમયે ફોર્ડના સંશોધન દરમિયાન સમાન વિકાસ થયો હતો. તે હજી અસ્પષ્ટ છે કે તેમને સૌપ્રથમ કોણે બનાવ્યું.

લેખ મુખ્યત્વે પ્રક્ષેપ અને વળાંક ચિત્ર પર ધ્યાન કેન્દ્રિત કરે છે. પ્રક્ષેપિત કરતી વખતે, તમારે અજ્ઞાત પ્રવાહોનો ઉપયોગ કરીને શોધવાની જરૂર છે જાણીતા મૂલ્યો. છૂટાછવાયા બિંદુઓના સમૂહને સતત બંધારણ તરીકે રજૂ કરી શકાય છે, જેના પરિણામે ખૂટતા બિંદુઓ માટે કડક રીતે વ્યાખ્યાયિત વળાંક આવે છે. વળાંકને ચોક્કસ આધાર બિંદુઓ સાથે પ્રારંભ કરવામાં આવે છે અને નવા બિંદુઓ બનાવવાનો પ્રયાસ કરે છે જે જૂના મૂલ્યોની અંદાજિત (અથવા પ્રક્ષેપિત) કરે છે.

બેઝિયર વળાંક બાંધવા માટે અલ્ગોરિધમ

n +1 પોઈન્ટ P 0 ,…,P n ને ધ્યાનમાં લો અને પોઈન્ટને અંદર જોડો તૂટેલી લાઇન, ત્યારબાદ નિયંત્રણ વિસ્તાર કહેવાય છે.

બિંદુઓ P i, i = 0,...,n જોતાં, આપણું કાર્ય t ની તમામ કિંમતો માટે વળાંક g (t) નક્કી કરવાનું છે? . વિચાર નીચે દર્શાવેલ છે:

વિશે મુખ્ય અલ્ગોરિધમનો

અહીં ધ્યેય બે નજીકના બિંદુઓ વચ્ચે મધ્યમાં બિંદુઓ શોધવાનું છે અને જ્યાં સુધી તમામ પુનરાવર્તનો સમાપ્ત ન થાય ત્યાં સુધી આને પુનરાવર્તન કરો. નવા બિંદુ મૂલ્યો વળાંક ઉત્પન્ન કરશે. પ્રખ્યાત સમીકરણબેઝિયર આ વિચારની ચોક્કસ રચના છે. અહીં એલ્ગોરિધમ છે:

પગલું 1: ટી મૂલ્ય પસંદ કરો? . આ મૂલ્ય અન્ય તમામ પગલાઓમાં બદલાતું નથી.

પગલું 2: i = 0,...,n માટે P i (t) = P i સેટ કરો.

પગલું 3: j = 0,...,n માટે, i = j,...,n માટે સેટ કરો.

પગલું 4: g(t) = Pn(t)

ખાનગી અને સામાન્ય કેસો

સામાન્ય અને વિશેષ કેસો માટેના ફોર્મ્યુલા, અમુક એપ્લિકેશનમાં ઉપયોગી, અહીં આપવામાં આવશે. લેખમાંનો કોડ આમાંથી કોઈ દર્શાવતો નથી, પરંતુ તે સામાન્ય સૂત્રનો ઉપયોગ કરે છે. ચાલો સામાન્ય સૂત્ર સાથે પ્રારંભ કરીએ:

આ લેખ અને કોડમાં વપરાયેલ સરળતા અને સંમેલન માટે, આ સૂત્રને આ રીતે રજૂ કરવું વધુ સારું છે:

આ સમીકરણ એ ઉપરોક્ત અલ્ગોરિધમ (મિડપોઇન્ટ પુનરાવૃત્તિ) ની માત્ર એક રચના છે. તે મહત્વનું છે કે સમગ્ર અલ્ગોરિધમને એક સૂત્રમાં ઘટાડી શકાય છે, અને સીધા અમલીકરણ યોગ્ય પરિણામો આપી શકે છે. અહીં n પોઈન્ટની સંખ્યા દર્શાવે છે અને P પોઈન્ટ્સ પોતે સૂચવે છે. પોઈન્ટના ફેક્ટોરિયલ ગુણાંકને બર્નસ્ટેઈન બેઝિસ ફંક્શન કહેવામાં આવે છે, જેનું નામ તેમના સર્જકના નામ પરથી રાખવામાં આવ્યું છે.

અહીં ખાસ કિસ્સાઓ છે:

લીનિયર બેઝિયર:

ચતુર્ભુજ બેઝિયર:

બેઝિયર ત્રીજી ડિગ્રી:

સમજૂતી અને કોડનો ઉપયોગ

આ તે કાર્ય છે જે તમામ કાર્ય કરે છે. તે ખૂબ જ ટૂંકું અને ખૂબ જ સરળ છે. અમે માત્ર 2D વળાંકો સાથે કામ કરી રહ્યા હોવાથી, બિંદુઓમાં માત્ર X અને Y કોઓર્ડિનેટ્સ છે. ફંક્શન બેઝિયર પોઈન્ટની ગણતરી કરે છે.

સાર્વજનિક રદબાતલ Bezier2D (ડબલ b, int cpts, ડબલ p)
{
int npts = (b. લંબાઈ) / 2;
int icount, jcount;
ડબલ સ્ટેપ, ટી;

// વળાંક પરના બિંદુઓની ગણતરી કરો

Icount = 0;
t = 0;
પગલું = (ડબલ)1.0 / (cpts - 1);

માટે (int i1 = 0; i1 != cpts; i1++)
{
જો ((1.0 - t)< 5e-6)
t = 1.0;

Jcount = 0;
p = 0.0;
p = 0.0;
માટે (int i = 0; i != npts; i++)
{
ડબલ બેસિસ = બર્નસ્ટેઇન(એનપીટીએસ - 1, આઇ, ટી);
p += આધાર * b;
p += આધાર * b;
jcount = jcount +2;
}

Icount += 2;
t += પગલું;
}
}

બાકીના કાર્યો ફેક્ટોરિયલ ગણતરીમાં સામેલ માત્ર સહાયક કાર્યો છેઅને આધારભૂત કાર્યોની ગણતરીઓ, જે તદ્દન નજીવી છે . આ કાર્યનો યોગ્ય રીતે ઉપયોગ કરવા માટે,તેને ફોર્મેટમાં પોઈન્ટનો સમૂહ પસાર કરો: XYXYXYXYXYXYXYXYXYXY.... કોઓર્ડિનેટ્સ, અને તમારે વળાંક પર કેટલા પોઈન્ટની ગણતરી કરવાની જરૂર છે. ફંક્શન એરે p ને ટ્રેજેક્ટરી પોઈન્ટ સાથે ભરી દેશે.

ફેક્ટોરિયલ ગણતરીઓની મર્યાદાઓને કારણે, કોડ માત્ર 32 પોઈન્ટ સુધીના વળાંકોની ગણતરી કરે છે. વધુ જટિલ ડિઝાઇન સામાન્ય રીતે કર્વ ડેટાના સંયોજનનો ઉપયોગ કરીને રજૂ કરવામાં આવે છે (જેમ કે એડોબ ફોટોશોપ, ઇલસ્ટ્રેટર અને ફ્લેશના પાથ ટૂલમાં).

GDI (ગ્રાફિક્સ ડિવાઇસ ઇન્ટરફેસ) માં બિલ્ટ-ઇન બેઝિયર કર્વ ગણતરી કાર્ય હોવા છતાં, તાલીમ માટે બિલ્ટ-ઇન લાઇબ્રેરીઓનો ઉપયોગ કરવાની સલાહ આપવામાં આવતી નથી. GDI હંમેશા તમારા માટે કામ કરશે નહીં! ક્યાંક, ક્યાંક, તમારે તેને અમલમાં મૂકવાની જરૂર પડી શકે છે, અને ત્યાં સુધીમાં તમને આ વળાંકો કેવી રીતે કાર્ય કરે છે તેનો સ્થૂળ ખ્યાલ હોવો જોઈએ.

આપણે બધા જાણીએ છીએ કે વળાંક શું છે. અહીં કેટલાક ઉદાહરણો છે.

બેઝિયર વણાંકો વાપરવા માટે ખૂબ જ સરળ છે અને ઘણા આકારોનું વર્ણન કરી શકે છે. બેઝિયર વણાંકોનો ઉપયોગ ફોન્ટ્સ અને ડિઝાઇનના આકારોમાં અક્ષરોને રજૂ કરવા માટે વ્યાપકપણે થાય છે. વાહનો. વેક્ટર ગ્રાફિક્સ એડિટર્સમાં બેઝિયર વણાંકોનો ઉપયોગ વિવિધ વળાંકોને રજૂ કરવા માટે થાય છે, અને એનિમેશન વણાંકોને રજૂ કરવા માટે 3D એનિમેશન ટૂલ્સમાં.

રમતોમાં, બેઝિયર વણાંકો ક્યારેક પાથનું વર્ણન કરવા માટે ઉપયોગી છે: રેસિંગ ગેમમાં ટ્રેક પરનો રેસિંગ પાથ અથવા લાઇન-ડ્રોઇંગ ગેમ્સમાં રેખાઓ જેમ કે ફ્લાઇટ નિયંત્રણ, અથવા આરપીજીની દુનિયામાં રહેતી બટરફ્લાયની લૂપ ટ્રેજેક્ટરી.

બેઝિયર વણાંકો એટલા લોકપ્રિય છે કારણ કે તેઓ ગાણિતિક વર્ણનોખૂબ જ કોમ્પેક્ટ, સાહજિક અને ભવ્ય. તેઓ ગણતરી કરવા માટે સરળ છે, વધુ ઉપયોગમાં સરળ છે ઉચ્ચ પરિમાણો(3D અને ઉપર), અને તમે કલ્પના કરી શકો તે કોઈપણ આકારને રજૂ કરવા માટે એકસાથે કનેક્ટ કરી શકાય છે.

આ ટ્યુટોરીયલમાં, હું તમને અલ્ગોરિધમનો અમલ કરવા માટે જરૂરી સૂચનાઓ આપીશ જેથી તમે તમારી રમતોમાં બેઝિયર કર્વ્સનો ઉપયોગ કરી શકો.

ગાણિતિક વર્ણન

ચાલો ગણિતથી શરૂઆત કરીએ. ગાણિતિક રીતે, આપણે બેઝિયર વળાંકનું વર્ણન કરી શકીએ છીએ કાર્યફંક્શન એક પરિમાણ લે છે. કાર્યનું મૂલ્ય વળાંક પર એક બિંદુ છે; તે પરિમાણ પર આધાર રાખે છે , અને કહેવાય બિંદુઓના સમૂહ પર નિયંત્રણ બિંદુઓ.પ્રથમ અને છેલ્લા નિયંત્રણ બિંદુઓ વળાંકના છેડા છે. સામાન્ય રીતે, વળાંક અન્ય નિયંત્રણ બિંદુઓમાંથી પસાર થતો નથી.

મૂલ્ય 0 થી 1 સુધીની હોઈ શકે છે. 0 નું મૂલ્ય અનુલક્ષે છે પ્રારંભિક બિંદુવળાંક, મૂલ્ય 1 વળાંકના અંતિમ બિંદુને અનુલક્ષે છે. વચ્ચેના મૂલ્યો વળાંક પરના બાકીના બિંદુઓને અનુરૂપ છે.

અહીં બેઝિયર કર્વના સરળ પ્રકારનું ઉદાહરણ છે, એક સેગમેન્ટ:

અલગ કોઓર્ડિનેટ્સ આપતા બે સમીકરણો માટે અહીં એક ટૂંકું સૂચન છે:

બિંદુઓ નિયંત્રણ બિંદુઓ છે. જ્યારે, જમણી બાજુસમીકરણ એ પ્રથમ નિયંત્રણ બિંદુ સમાન છે - સેગમેન્ટની શરૂઆત. જ્યારે , આપણને બિંદુ મળે છે, ત્યારે બીજો નિયંત્રણ બિંદુ સેગમેન્ટનો અંત છે.

વધુ રસપ્રદ આકારો માટે અમને વધુ નિયંત્રણ બિંદુઓની જરૂર છે. નિયંત્રણ બિંદુઓની સંખ્યા નક્કી કરે છે ડિગ્રીકુટિલ ઉપરના રેખાખંડ જેવા રેખીય (પ્રથમ ડિગ્રી) વળાંકો માટે બે નિયંત્રણ બિંદુઓ જરૂરી છે. બીજી ડિગ્રી માટે, અથવા ચતુર્ભુજવણાંકો, અમને ત્રણ નિયંત્રણ બિંદુઓની જરૂર છે.

અહીં સૂત્ર છે:

ઘન વણાંકો(અથવા થર્ડ-ડિગ્રી વણાંકો) સૌથી વધુ ઉપયોગમાં લેવાય છે, અને તેથી આ માર્ગદર્શિકામાં આપણે ચર્ચા કરીશું ઘન વણાંકો. તેમને બનાવવા માટે ચાર નિયંત્રણ બિંદુઓની જરૂર છે, અને તમે વેક્ટર ગ્રાફિક્સ પેકેજોમાં તેમના ઉપયોગથી પહેલાથી જ ખૂબ જ પરિચિત હોઈ શકો છો (હા, સમાન વર્તુળો કે જેનો ઉપયોગ ફ્રીહેન્ડ અથવા ઇન્કસ્કેપમાં વણાંકોના આકારને બદલવા માટે થાય છે તે અમારા નિયંત્રણ બિંદુઓ છે).

પીળી રેખાઓ વળાંકના છેડા પરના સ્પર્શકોની જેમ જ દિશામાં વિસ્તરે છે. આ પીળા ભાગો જેટલા વધુ દૂર સ્થિત છે, વળાંક સ્પર્શકોની દિશામાં વધુ "ખેંચાયેલ" છે.

ક્યુબિક બેઝિયર વણાંકો માટેનું સૂત્ર:

તમને વળાંકની ઉચ્ચ ડિગ્રીની જરૂર હોવાની શક્યતા નથી. જો એમ હોય, તો સૂત્ર સરળ છે, પરંતુ કેટલાક જ્ઞાનની જરૂર છે દ્વિપદી ગુણાંક. તમે લેખના અંતે એક સ્ત્રોતમાં વિગતો મેળવી શકો છો.

કેસો

ભૂમિતિમાં હંમેશા રહેશે વધુ સમસ્યાઓતમે પહેલા વિચારી શકો તેના કરતાં,જે ભૂલો માટે લાંબી શોધ તરફ દોરી શકે છે.

અહીં સાચા 2D બેઝિયર વણાંકો છે:

બધા અંતિમ બિંદુઓએકબીજાથી સમાન અંતરે. 1. વળાંક, ક્રિઝ અથવા લૂપ વગરનો વળાંક. 2. ક્રિઝ અથવા લૂપ્સ વિના, વળાંક સાથેનો વળાંક. 3. ક્રીઝ સાથે વળાંક. 4. લૂપ સાથે વળાંક. 5. સીધી રેખા. (વળાંક બિંદુ પર, વળાંક ફોલ્ડ દિશાઓને બદલે છે)

ડિજનરેટ કેસ 5 સૌથી મુશ્કેલ છે. નીચેના વિકલ્પો ઉપલબ્ધ હોઈ શકે છે:

  • ઓવરલેપ નથી
  • વળાંક એક અથવા બંને છેડે બે વાર તૂટી જાય છે
  • વળાંક છેડા વચ્ચે ક્યાંક ત્રણ વખત ત્રણ વળે છે

એક છઠ્ઠો કેસ છે જ્યારે તમામ ચાર નિયંત્રણ બિંદુઓ એકરૂપ થાય છે: પરિણામે, વળાંક એક બિંદુમાં અધોગતિ કરે છે. નોંધ કરો કે જ્યારે માત્ર અંતિમ બિંદુઓ મેળ ખાય છે ત્યારે વળાંક બિંદુમાં ક્ષીણ થતો નથી - તમામ ચાર નિયંત્રણ બિંદુઓ મેળ ખાતા હોવા જોઈએ. ટેક્નિકલ વિગતોમાં રસ ધરાવતા લોકો સ્ટોન અને ડી રોઝ દ્વારા પેરામેટ્રિક ક્યુબિક કર્વ્સ (1.6 એમબી પીડીએફ)નું જિયોમેટ્રિક કેરેક્ટરાઇઝેશન વાંચી શકે છે. ક્યુબિક બેઝિયરના ઈન્ફ્લેક્શન પોઈન્ટ્સનો લેખ ઈન્ફ્લેક્શન પોઈન્ટની ગણતરી કેવી રીતે કરવી તે સમજાવે છે અને વિઝ્યુઅલ ઈલસ્ટ્રેશન માટે ઇન્ટરેક્ટિવ જાવા એપ્લેટ્સ પણ પ્રદાન કરે છે.

3D માં, આંટીઓ અને અસ્થિભંગ પહોંચાડે છે ઓછી સમસ્યાઓ, કારણ કે તે ત્યારે જ દેખાય છે જ્યારે બધા બિંદુઓ એક જ પ્લેનમાં હોય છે. 3D માં તમે હંમેશા રેખાની દિશા બદલી શકો છો (ખાસ કરીને 2, 4 અને 5 જેવા કેસ માટે).

બેઝિયર કર્વ એલ્ગોરિધમનો અમલ કરતી વખતે, ચોક્કસ કેસમાં આ પ્રકારના વળાંકને લાગુ કરવાની યોગ્યતા વિશે કાળજીપૂર્વક વિચારો અને હંમેશા તપાસો કે અલ્ગોરિધમ યોગ્ય રીતે કાર્ય કરી રહ્યું છે. નિયંત્રણ બિંદુઓ સાથે ખાસ કરીને સાવચેત રહો - જો તે એકરૂપ થાય, તો સામાન્યીકરણની સ્થિતિ ઊભી થઈ શકે છે શૂન્ય વેક્ટર, જે બદલામાં પ્રોગ્રામના ક્રેશ તરફ દોરી શકે છે.

અમલીકરણ

ગાણિતિક સૂત્ર કોડમાં ભાષાંતર કરવા માટે સરળ છે. નીચે અલ્ગોરિધમનું અમલીકરણ છે, જેમાં બચત અને પુનઃઉપયોગમધ્યવર્તી પરિણામો.

કોડ C# માં છે, પરંતુ તેને Java, C++ અને મોટાભાગની અન્ય ભાષાઓમાં અનુવાદિત કરવામાં કોઈ સમસ્યા ન હોવી જોઈએ.

(જો Vector3 ને Vector2 સાથે બદલવામાં આવે તો નીચેના કાર્યો 2D માં પણ કામ કરશે.)

Vector3 કેલ્ક્યુલેટબેઝિયરપોઈન્ટ(ફ્લોટ t, Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) ( float u = 1 – t; float tt = t* t; float uu = u* u; float uuu = uu * u; float ttt = tt * t; vector3 p = uuu * p0; //first term p += 3 * u * tt * p3;

બેઝિયર વણાંકો દોરવા

હવે અમારી પાસે બેઝિયર વળાંક પર બિંદુની ગણતરી કરવાની રીત છે, અમને વળાંક દોરવાની રીતની જરૂર છે.

છબીઓ માટે, જરૂરી બિંદુઓની ગણતરી કરવા માટે પુનરાવર્તનનો ઉપયોગ કરવાનો સૌથી સરળ અભિગમ છે:

માટે (int i = 0; i<= SEGMENT_COUNT; ++ i) { t = i / (float ) SEGMENT_COUNT; Vector3 pixel = CalculateBezierPoint(t, p0, p1, p2, p3) ; DrawPixel(pixel) ; // ધારો કે આ કાર્ય Vector3 ને હેન્ડલ કરી શકે છે }

આ અભિગમ નીચેની સમસ્યાઓથી પીડાય છે:

વધુ અદ્યતન અલ્ગોરિધમ્સ આ સમસ્યાઓને દૂર કરવા માટે અનુકૂલનશીલ લાભનો ઉપયોગ કરે છે. વળાંકને એન્ટિઅલિયસ કરવાથી સામાન્ય રીતે ઉત્તમ પરિણામ મળશે, જે વળાંકને ખૂબ જ સરળ અને સ્પષ્ટ બનાવે છે. વણાંકો દોરવા માટેનો સારો સ્રોત (અને અન્ય ઉપયોગી વિષયોનો સમૂહ) ડેવિડ સલોમન દ્વારા કમ્પ્યુટર ગ્રાફિક્સ અને કમ્પ્યુટર મોડેલિંગ છે.

પિક્સેલને બદલે રેખાઓ દોરવાનો એક સરળ વિકલ્પ છે. આ પદ્ધતિ ગ્રાફિક્સ હાર્ડવેરનો ઉપયોગ કરીને વણાંકો દોરવા માટે પણ વધુ યોગ્ય છે.

q0 = ગણતરી કરો બેઝિયરપોઈન્ટ(0 , p0, p1, p2, p3);<= SEGMENT_COUNT; ++ i) { t = 1 / (float ) SEGMENT_COUNT; q1 = CalculateBezierPoint(t, p0, p1, p2, p3) ; DrawLine(q0, q1) ; q0 = q1; }

માટે (int i = 1; i

હવે આપણે ગુમ થયેલ પિક્સેલ્સ વિશે ચિંતા કરવાની જરૂર નથી, તેથી અમે એક મોટી વૃદ્ધિ પસંદ કરી શકીએ છીએ અને રેન્ડરિંગ લોડ ઘટાડી શકીએ છીએ. પરંતુ હજુ પણ ઇન્ક્રીમેન્ટને યોગ્ય રીતે પસંદ કરવું મુશ્કેલ છે.

ત્યાં અન્ય અલ્ગોરિધમ છે જે પુનરાવર્તિત પાર્ટીશનોનો ઉપયોગ કરે છે. તે સામાન્ય રીતે અગાઉના અલ્ગોરિધમ કરતાં સમાન સ્તરની ચોકસાઈ માટે ઓછા રેન્ડરીંગ પોઈન્ટ ઉત્પન્ન કરે છે. જો કે, તે તમામ વળાંકોને કિંક અથવા લૂપ્સ સાથે યોગ્ય રીતે હેન્ડલ કરતું નથી, અને જો આવા કિસ્સાઓ થવાની સંભાવના હોય તો તેનો ઉપયોગ કરવો જોઈએ નહીં.

અહીં અલ્ગોરિધમ છે:

1. નીચેની આકૃતિ કાર્યકારી ઉદાહરણ બતાવે છે. ચાલો બે અંતિમ બિંદુઓ અને તેમની વચ્ચેના બિંદુથી પ્રારંભ કરીએ. અમે બે વિભાગો વચ્ચે રચાયેલ કોણ તપાસીએ છીએ. 2. તે એટલું નાનું છે કે અમે તેમની વચ્ચે રેન્ડર પોઈન્ટ ઉમેરીશું.પછી આપણે વળાંકની ડાબી બાજુ માટે તે જ કરીએ છીએ. 3. આ કિસ્સામાં, ખૂણો એટલો મોટો છે કે આપણે કોઈ બિંદુ ઉમેરતા નથી અને આગળ વિભાજિત થતા નથી. અમે વળાંકની જમણી બાજુ માટે તે જ કરીએ છીએ. 4. આ કિસ્સામાં, કોણ પૂરતું નાનું છે, તેથી અમે સેગમેન્ટને દોરવા અને વિકસાવવા માટે નવા બિંદુઓ ઉમેરીએ છીએ. 5. અને અમે પાછલા પગલામાં બે ભાગો માટે તે જ કરીએ છીએ. 6. બિંદુઓના અંતિમ સમૂહનો ઉપયોગ વળાંક દોરવા માટે થાય છે.

નીચે પુનરાવર્તિત અલ્ગોરિધમનો કોડ છે. યુક્તિ એ છે કે પોઈન્ટ્સને સૂચિમાં યોગ્ય સ્થાને દાખલ કરો જેથી કરીને તે દોરવા માટે યોગ્ય ક્રમમાં રહે. અમે સીધા ખૂણાને તપાસવાને બદલે, નોર્મલાઇઝ્ડ સેગમેન્ટ્સના ડોટ પ્રોડક્ટને તપાસીએ છીએ. આ કારણે > ને બદલે સરખામણી માટે વપરાય છે< как если бы мы проверяли углы напрямую.

// ઉમેરાયેલ પોઈન્ટની સંખ્યા પરત કરે છે. int FindDrawingPoints(float t0, float t1, int insertionIndex, list pointList) ( tMid = (t0 + t1) / 2 ; p0 = bezierCurve(t0) ; p1 = bezierCurve(t1) ; જો (p0 – p1. sqrMagni< MINIMUM_SQR_DISTANCE) { return 0 ; } pMid = bezierCurve(tMid) ; leftDirection = (p0 – pMid) . Normalised ; rightDirection = (p1 – mMid) . Normalised ; if (Dot(leftDirection, rightDirection) >થ્રેશોલ્ડ) ( int pointsAddedCount = 0 ; પોઈન્ટ એડેડ += FindDrawingPoints(t0, tMid, insertionIndex, pointList) pointList. insert (insertIndex + pointsAdded, pMid) ; પોઈન્ટ એડેડ ++; પોઈન્ટ એડેડ += પોઈન્ટ ડ્રોઈંગ, 1 પોઈન્ટ ફાઈન્ડ ડ્રોઈંગ ; રીટર્ન પોઈન્ટ ઉમેરાયેલ ) રીટર્ન 0 ;

)

નીચેનું કાર્ય પુનરાવર્તિત કાર્ય કૉલ દર્શાવે છે:

void FindPoints() ( યાદી pointList = new List() ; p0 = bezierCurve(0 ) ; p1 = bezierCurve(1 ) ; pointList. ઉમેરો (p0) ; pointList. ઉમેરો (p1) ; int pointsAdded = FindPoints(0, 1, 1 , પોઈન્ટ લિસ્ટ) ;

  • થોડી નોંધો:
  • ખૂબ ટૂંકા વેક્ટરના સામાન્યકરણ સાથે સમસ્યાઓને રોકવા માટે લઘુત્તમ અંતરની તપાસ જરૂરી છે. તે બિનજરૂરી ગણતરીઓને પણ અટકાવે છે.
  • થ્રેશોલ્ડ મૂલ્ય આશ્ચર્યજનક રીતે -1 ની નજીક છે. શરૂ કરવા માટેનું સારું સ્થાન -0.99 છે.

એલ્ગોરિધમ એ વળાંકો માટે ખૂબ સારી રીતે કામ કરતું નથી જેમાં કિંક અથવા લૂપ્સ હોય છે. જો તમે તેને વળાંક સાથે વળાંક પર લાગુ કરો તો શું થઈ શકે તેનું ઉદાહરણ નીચે છે. એક ઉદાહરણ જેમાં અલ્ગોરિધમ ખરાબ પરિણામ આપશે. આ કિસ્સામાં, કોણ સ્વીકાર્ય થ્રેશોલ્ડ કરતાં વધી જાય છે, તેથી કોઈ વિભાજન થશે નહીં.

પરિણામ ઇચ્છિત વળાંક સાથે ખૂબ સમાન નથી.

ગ્લુઇંગ કર્વ્સ એકસાથે: બેઝિયર પાથ

  • જ્યારે આપણે જટિલ વળાંક બનાવવા માંગીએ છીએ, ત્યારે અમારી પાસે બે વિકલ્પો છે:
  • ઉચ્ચ ડિગ્રી સાથે એક બેઝિયર વળાંકનો ઉપયોગ કરો;

વળાંકને નાના ભાગોમાં વિભાજીત કરો, અને દરેક સેગમેન્ટ માટે નીચા ડિગ્રી બેઝિયર વણાંકોનો ઉપયોગ કરો. છેલ્લા પ્રકારનો વળાંક કહેવાય છેમાર્ગોબેઝિયર. બેઝિયર પાથ સામાન્ય રીતે વણાંકો કરતાં વાપરવા માટે સરળ અને વધુ કાર્યક્ષમ હોય છેઉચ્ચ ડિગ્રી

અહીં બતાવેલ અમલીકરણ ઘણા સંભવિત લોકોમાંથી માત્ર એક છે. અમે એક વર્ગને વ્યાખ્યાયિત કરીશું જે બેઝિયર કર્વ નિયંત્રણ બિંદુઓની સૂચિ બનાવે છે જે બેઝિયર પાથ બનાવે છે. સેગમેન્ટ્સ એન્ડ-ટુ-એન્ડ સાથે જોડાયેલા હોવાથી, અડીને આવેલા વળાંકોના શરૂઆત અને અંતિમ બિંદુઓ સમાન છે, તેથી આપણે ડુપ્લિકેટ બિંદુઓને ટાળી શકીએ છીએ. આકૃતિ ચાર બેઝિયર વણાંકોથી બનેલા બેઝિયર પાથનું ઉદાહરણ બતાવે છે. આ કિસ્સામાં, સૂચિમાં 13 પોઈન્ટ છે, જેમ કે ડાબી બાજુની આકૃતિમાં બતાવ્યા પ્રમાણે.

જો આપણે સેગમેન્ટ્સ સાથે વળાંક બાંધવાનું નક્કી કરીએ, તો પછી સારો નિર્ણયસેગમેન્ટ્સના અંતિમ બિંદુઓને કેશ કરશે, અને વળાંક બદલાતા તેમને અપડેટ કરશે. આગામી અલ્ગોરિધમબધા ડ્રોઇંગ પોઈન્ટ્સ (સેગમેન્ટ્સના અંતિમ બિંદુઓ) ની ગણતરી કરે છે.

વર્ગ BezierPath ( સૂચિ નિયંત્રણ પોઈન્ટ્સ; Vector3 કેલ્ક્યુલેટબેઝિયરપોઈન્ટ(ફ્લોટ t, Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3) (... ) સૂચિ GetDrawingPoints() ( સૂચિ ડ્રોઈંગપોઈન્ટ્સ = નવી સૂચિ() ; માટે (int i = 0 ; i< controlPoints. Count - 3 ; i+= 3 ) { Vector3 p0 = controlPoints[ i] ; Vector3 p1 = controlPoints[ i + 1 ] ; Vector3 p2 = controlPoints[ i + 2 ] ; Vector3 p3 = controlPoints[ i + 3 ] ; if (i == 0 ) // ફક્ત આ કરો માટેપ્રથમ અંતિમ બિંદુ. //જ્યારે i != 0, આ અંત સાથે એકરુપ થાય છે પાછલા સેગમેન્ટનો //બિંદુ( ડ્રોઈંગ પોઈન્ટ્સ. (int j = 1 ; j) માટે (CalculateBezierPoint(0 , p0, p1, p2, p3) );<= SEGMENTS_PER_CURVE; j++ ) { float t = j / (float ) SEGMENTS_PER_CURVE; drawingPoints. Add (CalculateBezierPoint(t, p0, p1, p2, p3) ) ; } } return drawingPoints; } }

આ પુનરાવર્તિત અલ્ગોરિધમને મધ્યવર્તી બિંદુઓ મેળવવા માટે સરળતાથી સ્વીકારવામાં આવે છે. તમે લેખ સાથે જોડાયેલા કોડમાં એક ઉદાહરણ શોધી શકો છો.

બેઝિયર પાથનો અમલ કરતી વખતે, તમે નીચેની બાબતો કરીને તમારું જીવન ઘણું સરળ બનાવી શકો છો:

  • કંટ્રોલ પોઈન્ટ્સ, બેઝિયર એન્ડપોઈન્ટ્સ, ડ્રોઈંગ પોઈન્ટ્સ અને ટેન્જેન્ટ્સ દોરવા માટે ડિબગીંગ મોડ્સ સક્ષમ કરો.
  • ડ્રોઈંગ પોઈન્ટ અને કંટ્રોલ પોઈન્ટ્સની સંખ્યા દર્શાવો: આનો આભાર, તમે હંમેશા એલ્ગોરિધમ કેટલા પોઈન્ટ જનરેટ કરે છે અને આ નંબરની સેનિટી તપાસી શકો છો.

અને અંતે - બેઝિયર વણાંકો ખૂબ જ સરસ છે, પરંતુ તમારે તેનો ઉપયોગ દરેક જગ્યાએ કરવો જોઈએ નહીં, ખાસ કરીને ટૂંકી, લગભગ સીધી રેખાઓ દર્શાવવા માટે.

  • મોટા ભાગના 3D એન્જિનોને તમારે વળાંકો રેન્ડર કરવા માટે ટૂંકી, સીધી રેખાઓનો ઉપયોગ કરવાની જરૂર છે, તેથી તમારે બેઝિયર કર્વ રેન્ડરિંગને અમલમાં મૂકવાના મૂલ્ય વિશે સ્પષ્ટ હોવું જોઈએ.
  • જ્યારે ચળવળને ભૌતિકશાસ્ત્ર દ્વારા નિયંત્રિત કરવામાં આવે છે, ત્યારે ગતિ અને દિશામાં અચાનક ફેરફારો વર્ચ્યુઅલ રીતે અસ્તિત્વમાં નથી. ઑબ્જેક્ટ સામાન્ય રીતે ઑબ્જેક્ટ પર કામ કરતા બળને બદલીને આગળ વધે છે, અને આ કારણે, તેમની ઝડપ તરત જ બદલી શકતી નથી. આ રીતે, કોઈપણ હિલચાલ આપમેળે સુંવાળી થઈ જાય છે: જોડાયેલ સીધી રેખાઓ સાથે અનુસરતી કોઈપણ ઑબ્જેક્ટ આપમેળે સુંવાળી પાથને અનુસરશે - બેઝિયર વણાંકોની કોઈ જરૂર નથી.

ડાઉનલોડ કરો

  • બેઝિયર કર્વ્સ (64 KB, યુનિટી 3D પ્રોજેક્ટ, ઝિપ કરેલ)
  • BezierPath.cs (C# સ્ત્રોત કોડ ફાઇલ)

લેખ એ અનુવાદ, સ્ત્રોત લિંક છે - તમારી ગેમ્સ માટે બેઝિયર કર્વ્સ: એક ટ્યુટોરીયલ.
જો તમને અનુવાદમાં કોઈ અચોક્કસતા જણાય, તો કૃપા કરીને પૃષ્ઠના તળિયે દર્શાવેલ સરનામાં પર પત્ર દ્વારા તેની જાણ કરો.

ત્રિજ્યા-વેક્ટર B-વક્ર

    અમે ટી ઠીક કરીએ છીએ. ચાલો માની લઈએ કે એવું એક જ છે જ્યાં

    ઉપર નિર્ધારિત અનુક્રમણિકા માટે, જો આપણે પ્રથમ સ્તર (m=1) ના બિન-સામાન્ય B-સ્પલાઇનના એકમાત્ર બિન-શૂન્ય મૂલ્યની ગણતરી કરીએ તો:

    યાદ કરો કે પ્રથમ પગલામાં શું પસંદ કરવામાં આવ્યું હતું, જેથી તદુપરાંત, સ્થિતિને કારણે છેદ અને સ્થિતિને કારણે અમારી પાસે છે તેથી, સેટની બહાર સ્થિત અનુક્રમણિકા માટે, મૂલ્યની ગણતરી કરવામાં આવતી નથી.

    કોક્સ-ડી બોઅર સંબંધોનો ઉપયોગ કરીને, અમે ક્રમાંકના તમામ બિન-શૂન્ય બિન-શૂન્ય સ્પલાઇનની ગણતરી કરીએ છીએ :


    ખાસ કરીને,

    (6.6)

    જ્યાં (6.6) મૂકવાથી આપણને મળે છે

    લેમ્મા 6.5. સંબંધ છે:

  1. અમે દરેક માટે સામાન્ય સ્પ્લાઇન્સની ગણતરી કરીએ છીએ સૂત્ર અનુસાર (તે જ સમયે).

  2. આપણે છેલ્લે સૂત્રનો ઉપયોગ કરીને ગણતરી કરીએ છીએ

બી-વળાંકના ત્રિજ્યા વેક્ટરની ગણતરી માટે ડી બોઅર અલ્ગોરિધમ

પ્રમેય 6.4. B-વળાંકનો ત્રિજ્યા વેક્ટર r(t):

નીચેના અલ્ગોરિધમનો ઉપયોગ કરીને ગણતરી કરી શકાય છે:

આ અલ્ગોરિધમ નીચેના ડાયાગ્રામ દ્વારા સચિત્ર છે ( ):

નિયંત્રણ બિંદુ અને વજન મેટ્રિસિસ દ્વારા વ્યાખ્યાયિત સપાટીઓ

બેઝિયર સપાટીઓ

વ્યાખ્યા 6.2.1. લંબચોરસ મેટ્રિક્સ (બેઝિયર ગ્રીડ) બનાવે છે ત્યાં અવકાશમાં (m +1) * (n+1) બિંદુઓ આપવા દો:

બેઝિયર સપાટી ઓર્ડર m * n , અનુરૂપ મેશને સપાટી કહેવામાં આવે છે

(6.7)

જ્યાં E એ પ્રથમ ઇન્ડેક્સ પર ફોરવર્ડ શિફ્ટ ઓપરેટર છે, F એ બીજા ઇન્ડેક્સ પર ફોરવર્ડ શિફ્ટ ઓપરેટર છે:

ઑપરેટર્સ E અને F દેખીતી રીતે એકબીજા સાથે મુસાફરી કરે છે: તેથી, એટલે કે, ફોર્મ્યુલા (6.7) સુસંગત છે.

વ્યાખ્યા 6.2.2. વજનવાળા બિંદુઓથી બનેલ તર્કસંગત બેઝિયર સપાટીને નીચે પ્રમાણે વ્યાખ્યાયિત કરવામાં આવે છે:

(6.8)

ફોર્મ્યુલા (6.8) નો અર્થ એ છે કે આપણે બિંદુ દ્વારા બેઝિયર સપાટી બિંદુ બનાવીએ છીએ અને પછી પરિવર્તન લાગુ કરીએ છીએ

સમસ્યા 6.2.1. નીચેના પ્રોગ્રામમાં પ્રારંભિક ડેટા બિંદુઓ (નિયંત્રણ બિંદુઓ) અને (તેમના વજન) ને બદલીને તર્કસંગત બેઝિયર સપાટી પર નિયંત્રણ બિંદુઓ અને તેમના વજનના પ્રભાવનો દૃષ્ટિપૂર્વક અભ્યાસ કરો. વેઇટ મેટ્રિક્સમાં દ્વિ-પરિમાણીય વેક્ટર હોય છે, પરંતુ માત્ર તેમના પ્રથમ ઘટકનો ઉપયોગ થાય છે. બીજો ઘટક નિશ્ચિત છે. આ સ્કેલરથી બનેલા મેટ્રિસીસ પર બેઝિયર ફંક્શન લાગુ કરવામાં મેથેમેટિકાની અસમર્થતાને કારણે છે.

ઉદાહરણ 6.2.1. સ્લાઇડર્સનો ઉપયોગ કરીને સીધા વજનને નિયંત્રિત કરવાની ક્ષમતા સાથે તર્કસંગત બેઝિયર સપાટી.

માં: = ડાયનેમિક મોડ્યુલ [ (pts, a, w0, pw, w, g, f, w6, w7, wl0, wll, i, j, out, ins, u, v, n, pts0), pts = ((( 0, 0, 0), (0, 1, 0), (0, 2, 0), (0, 3, 0)), (1, 0, 0), (1, 1, 1), ( 1, 2, 1), (1, 3, 0)), (2, 0, 0), (2, 1, 1), (2, 2, 1), (2, 3, 0)), ((3, 0, 0), (3, 1, 0), (3, 2, 0) , (3, 3, 0))); pts0 = ફ્લેટન ;


n = લંબાઈ ;

પંક્તિ[(મેનીપ્યુલેટ કરો], (i, 1, 4), (j, 1, 4)]; pw = કોષ્ટક ] pts [ ], (i, 1, 4) , ( j, 1, 4) ]; g = BezierFunction; f = BezierFunction; Show[(Graphics3D[(PointSize, Red, Map , Green, Text , pts0[[#]] + (0.01, 0.04, 0.04)] & /@ રેન્જ[n])], ગ્રાફિક્સ 3D[( ગ્રે, ડેશેડ, લાઇન, લાઇન])], પેરામેટ્રીયોપ્લોટ3ડી / જી , (યુ, 0, 1), (વી, 0, 1), પ્લોટ સ્ટાઇલ -> ફેસફોર્મ ] )], કૉલમ[(નિયંત્રણ[((ઇન્સ, ગ્રીન, "આંતરિક રંગ"), લીલો)], નિયંત્રણ[((બહાર, લાલ, "બાહ્ય રંગ"), લાલ)]), જમણે], ((w5, 10), 1, 100), ((w6, 10) , 1, 100), ((w9, 10), 1, 100), ((wl0, 10), 1, 100)] મેટ્રિક્સફોર્મ) , " " ], પ્રારંભ: -> (pts = (((0, 0) , 0), (0, 1, 0), (0, 2, 0), (0, 3, 0)), (1, 0, 0), (1, 1, 1), (1, 2 , 1), (1, 3, 0)), ((2, 0, 0), (2, 1, 1), (2, 2, 1), (2, 3, 0)), ((3 , 0, 0), (3, 1, 0), (3, 3, 0))));

બેઝિયર સપાટીનો ભૌમિતિક અર્થ

બેઝિયર સપાટી નીચે પ્રમાણે મેળવી શકાય છે:

(6.9)

(6.10)

આ કિસ્સામાં, વળાંક પર લેવામાં આવેલા સંદર્ભ બિંદુથી અનુરૂપ સંક્રમણ ઓપરેટર ગ્રીડ નોડ્સ પીજના સંદર્ભમાં વળાંક પર લેવાયેલા આગળના સંદર્ભ બિંદુ સુધી બીજા અનુક્રમણિકા દ્વારા શિફ્ટ ઓપરેટર F દ્વારા વર્ણવવામાં આવે છે. આથી, જ્યાં m અને n એ અનુક્રમે પ્રથમ અને બીજા અનુક્રમણિકા સાથેના પગલાઓની સંખ્યા છે, જે બેઝિયર ગ્રીડના ખૂણાના બિંદુથી શરૂ થાય છે, 00 એ આ ખૂણાના બિંદુની અનુક્રમણિકા છે, જ્યાંથી આપણે શિફ્ટ ઓપરેટરો સાથે અન્ય તમામ ગ્રીડ ગાંઠો બનાવવાનું શરૂ કરીએ છીએ. ઇ અને એફ. અમારી પાસે છેઅહીં દ્વારા સૂચવવામાં આવે છે ચતુષ્કોણીય બેઝિયર શીટ્સ, પોઈન્ટ p ij તરીકે લેવામાં આવે છે

ખૂણાના બિંદુઓ

, ફોર્મ્યુલા જેવું જ (6.9). નીચેના અલ્ગોરિધમનો ઉપયોગ કરીને મેળવી શકાય છે:

પરિણામી બિંદુ તર્કસંગત બેઝિયર સપાટી પરના પરિમાણો સાથેનો એક બિંદુ હશે, જેનો ઉપયોગ કરીને બનાવવામાં આવે છે તેનો આકાર બદલ્યા વિના. આ વિભાજન સાથે, બે બેઝિયર સપાટીઓ (એકસાથે મૂળ સપાટીની રચના કરે છે) અને બેઝિયર નિયંત્રણ બિંદુઓના અનુરૂપ બે મેટ્રિસિસ મેળવવામાં આવે છે, જેમાંના દરેકનો ક્રમ મૂળ મેટ્રિક્સ જેવો જ હોય ​​છે: અને પછી, પરિણામી બે બેઝિયર સપાટીઓમાંથી દરેક હોવી આવશ્યક છે. પેરામેટ્રિક બિંદુ પર વિભાજિત (અનુરૂપ મેટ્રિસિસની પંક્તિઓમાંથી બાંધવામાં આવેલા બેઝિયર વણાંકોના વિભાજનનો ઉપયોગ કરીને). પરિણામે, તમને ચાર બેઝિયર સપાટીઓ અને નિયંત્રણ બિંદુઓના અનુરૂપ ચાર મેટ્રિસિસ મળશે: અને આ ચાર બેઝિયર સપાટીઓ મૂળ બેઝિયર સપાટી પર રહેશે, તેને ચાર ભાગોમાં વિભાજીત કરશે અને એકસાથે મૂળ સપાટી બનાવશે.

નવા નિયંત્રણ બિંદુ નેટવર્ક્સ અને દ્વારા મૂળ નેટવર્કમાંથી મેળવવામાં આવે છે નીચેના સૂત્રો, સૂત્રોની જેમ (5.26):




શું તમને લેખ ગમ્યો? તમારા મિત્રો સાથે શેર કરો!