社内勉強会で発表した内容です
デモ: https://mashabow.github.io/bezier-smoothness/ ソース: https://github.com/mashabow/bezier-smoothness 補足記事: https://shiromoji.hatenablog.jp/entry/2019/05/18/005232
ϕδΤۂઢͷ ͳΊΒ͔͞ͷ݄!NBTIBCPX
View Slide
͜Μʹͪw !NBTIBCPXw ιʔγϟϧ1-64ϑϩϯτΤϯυΤϯδχΞw લ৬ͰϑΥϯτͷΤϯδχΞΛ͍ͬͯͨw ࠓϕδΤۂઢʹ͍ͭͯޠΓ·͢
w ͍Ζ͍ΖͳਤܗฤूπʔϧͰݟΔΞϨϕδΤۂઢͬͯ
w ਓؒʹͱͬͯίϯϐϡʔλʹͱͬͯѻ͍͍͢w ϕΫλը૾ɾϑΥϯτɾඳը"1*ɾ$"%ͳͲͰར༻w ͝ΖɺγτϩΤϯͷ1BVMEF$BTUFMKBVͱ ϧϊʔͷ1JFSSF#É[JFS͕ಠཱʹ։ൃͨ͠Β͍͠w ࠓճฏ໘্ͷ࣍ϕδΤۂઢΛલఏʹͯ͠͠·͢ϕδΤۂઢ
ֶతͳදݱw ࢝ɹ੍ޚऴɹͷͰఆٛ͞ΕΔw ύϥϝʔλΛͷൣғͰ ಈ͔ͨ͠ͱ͖ͷي͕ɺ ීஈΑ͘ݟΔϕδΤۂઢB(t) = (1 − t)3 p0+ 3(1 − t)2t c0+ 3(1 − t)t2 c1+ t3 p1p0c0, c1p1t [0,1]p0= B(0)p1= B(1)c0c1B(0.6)
༡ΔσϞw ϕδΤۂઢΛຊ༻ҙ͓͍ͯͨ͠ͷͰɺ৮ͬͯΈΔw IUUQTNBTIBCPXHJUIVCJPCF[JFSTNPPUIOFTT
ࠓճͷςʔϚw ϕδΤۂઢͱϕδΤۂઢΛͳΊΒ͔ʹͭͳ͍͛ͨʂw ׳Ε͍ͯͳ͍ͱҙ֎ͱΉ͔͍ͣ͠w ͳΊΒ͔ʹͱ
·ͣͦͦw ͭͷϕδΤۂઢΛͭͳ͛Δඞཁ͕͋Δw ۂઢ"ͷऴͱɺۂઢ#ͷ࢝ΛҰகͤ͞Δʢ؆୯ʣw ɹ࿈ଓʢҐஔ࿈ଓʣͱ͍͏G0
Ͱ·ͩંΕ͍ͯΔw ࣍ɺͭͳ͛ͨ෦ͷ͖Λἧ͑Δඞཁ͕͋Γͦ͏w ۂઢͷ͖ͱʁˠઢͷ͖w ܭࢉͰٻΊΔͷͰ͋Εɺඍ͢ΕΑ͍B′(t) = (−3t2 + 6t − 3) p0+ (9t2 − 12t + 3) c0+ (−9t2 + 6t) c1+ 3t2 p1
ઢͱϋϯυϧw ࣮ɺ࢝ʗऴʹ͓͚Δઢͷ͖ɺ ϋϯυϧͷ͖ͱҰக͍ͯ͠Δw ɹɹΛܭࢉͯ͠ΈΔͱΘ͔ΔB′(0) B′(1)
͖Λἧ͑Δw ۂઢ" #ͷϋϯυϧΛҰઢʹฒΕΑ͍w ࠓճ୯७ʹɺۂઢ#ͷϋϯυϧͷ֯Λม͑ͯௐw ɹ࿈ଓʢઢ࿈ଓʣͱ͍͏G1
Ͱ·ͩෆࣗવw ۂ͕Γ۩߹͕ҧ͏Α͏ͳʜʁw ۂ͕Γ۩߹ͱ͜͜ΒΜͰٸʹ ઢͬΆ͘ͳͬͯϋϦ͕ͳ͘ͳͬͨΑ͏ͳ
৮ԁw ۂઢҰൠͩͱΑ͘Θ͔Βͳ͍ͷͰɺۙͳԁͰߟ͑ͯΈΔw ۂઢͷ͘͝Ұ෦͚ͩʹͯ͠ɺԁހͰۙࣅ͢Δw ͦͷۃݶͷԁΛ৮ԁͱ͍͏
Rw ৮ԁͷେ͖͞Ͱۂ͕Γ۩߹͕දݱͰ͖ͦ͏w ৮ԁͷܘΛۂܘͱݺͿw ۂܘ͕େ͖͍˱Χʔϒ͕ΏΔ͍w ۂܘ͕খ͍͞˱Χʔϒ͕͖͍ͭw ٸΧʔϒҙͷඪࣝʹ ॻ͍ͯ͋ͬͨΓ͢ΔۂܘR
ۂܘͷܭࢉw Ұൠͷύϥϝʔλۂઢͷۂܘɺ࣍ࣜͰܭࢉͰ͖Δw ͨͩ͠ɺμογϡύϥϝʔλɹʹΑΔඍΛද͢w ͜ͷࣜͰग़ͯ͘Δۂܘූ߸͖w ਖ਼ͳΒࠨճΓɺෛͳΒӈճΓR =(x′2 + y′2)32x′y′′− y′x′′t
෦ͷۂܘw ۂܘ͕ͥΜͥΜҧ͏
ۂw ۂܘͷٯɹɹΛۂɹͱ͍͏w ۂܘ͕େ͖͍˱ۂ͕খ͍͞˱Χʔϒ͕ΏΔ͍w ۂܘ͕খ͍͞˱ۂ͕େ͖͍˱Χʔϒ͕͖͍ͭw ͬͪ͜ͷํ͕Θ͔Γ͍͢ʁ1/R κۂେۂখ
ۂͷࢹ֮Խw DVSWBUVSFDPNCʢۂͷᷱʁʣw ֤ʹ͓͚ΔۂΛɺ๏ઢํʹදࣔͨ͠ͷw $"%ιϑτϑΥϯτΤσΟλʹࡌ͞Ε͍ͯΔۂେۂখมۂ
෦ͷۂͷᷱw ۂͷҧ͍͕Ұྎવ
ۂΛἧ͑Δw ΄Ͳ୯७Ͱͳ͍͕ɺܭࢉͰͳΜͱ͔Ͱ͖Δw ࠓճɺۂઢ#ͷϋϯυϧͷ͞Λม͑ͯௐw ɹ࿈ଓʢۂ࿈ଓʣͱ͍͏G2G0, G1
ϏϑΥʔΞϑλʔw ͗ͪ͜ͳ͕͞ݮͬͯɺΑΓͳΊΒ͔ʹͳͬͨ☺
·ͱΊw ϕδΤۂઢɾઢɾۂ͋ͨΓΛͬ͘͟Γઆ໌ͨ͠w ɹɹɹɹɹ࿈ଓੑΛຬͨ͢Α͏ʹௐ͢Δ͜ͱͰɺ ϕδΤۂઢ͕ͳΊΒ͔ʹͳͬͨw Ϣʔβʔʹͱͬͯɺ ࢹ֮Խ͕େ͖ͳख͕͔ΓʹͳΔG0, G1, G2
͜ͷઌͷτϐοΫw ɹ࿈ଓɺ͋Δ͍ͦΕҎ্ʁw ɹ࿈ଓͳΒͯ͢ਓؒͷݟͨʹඒ͍͠ʁw ࢥ͍ඳ͍͍ͯΔܗΛͳΔ่ͣ͘͞ʹௐ͢Δʹʁw ΫϩιΠυۂઢʢผ໊ɿΦΠϥʔཐટɺ4QJSPʣG3Gn