മൂന്ന് ഹൈലൈറ്റർ ജ്യാമിതി എഞ്ചിനുകൾക്ക് പകരം സ്റ്റാമ്പുകൾ തിരഞ്ഞെടുത്തത് എന്തുകൊണ്ട്
യഥാർത്ഥ Apple Pencil ഡാറ്റ സിന്തറ്റിക് ടെസ്റ്റുകൾ കാണാതെ പോയ പിഴവുകൾ പുറത്തുകൊണ്ടുവന്നു; അതിന്റെ ഫലമായി Lulucat Notes മൂന്ന് ഔട്ട്ലൈൻ എഞ്ചിനുകളിൽ നിന്ന് MaLiang സ്റ്റാമ്പ് മോഡലിലേക്ക് മാറി.
Lulucat Notes ഒരു സാധാരണ ഹൈലൈറ്റർ റെൻഡററിൽ നിന്നാണ് തുടങ്ങിയത്: സാമ്പിളുകളായി എടുത്ത പാതയ്ക്ക് ചുറ്റും ഒരു ജ്യാമിതീയ പുറംരേഖ വരയ്ക്കുക, പിന്നെ ആ രേഖ അർദ്ധസുതാര്യമായ നിറം കൊണ്ട് ഒരിക്കൽ മാത്രം നിറയ്ക്കുക. ഒരൊറ്റ ഫിൽ ഉപയോഗിക്കുന്നതിലൂടെ അർദ്ധസുതാര്യ സെഗ്മെന്റുകൾ തമ്മിൽ മൂടുന്നിടത്ത് രൂപപ്പെടുന്ന ഇരുണ്ട വരകൾ ഒഴിവാക്കാം. എന്നാൽ അപ്പോൾ ഓരോ ജോയിനും, സ്വയം മുറിച്ചുകടക്കലും, ക്യാപും, ചെറിയ സ്ട്രോക്കും ഒരേ ജ്യാമിതി പ്രശ്നത്തിന്റെ ഭാഗമാകുന്നു.
കസ്റ്റം ജ്യാമിതിയുടെ മൂന്ന് തലമുറകൾ ഓരോന്നും ഒരു വിഭാഗം പിഴവ് നീക്കിയപ്പോൾ മറ്റൊരു വിഭാഗം വെളിപ്പെടുത്തി. ഇപ്പോൾ ഷിപ്പ് ചെയ്യുന്ന റെൻഡറർ MaLiang ആശ്രയിച്ചുള്ള മൃദുവായ വൃത്താകൃതിയിലുള്ള സ്റ്റാമ്പുകളാണ് ഉപയോഗിക്കുന്നത്; Harley-xk നിർമ്മിച്ച MIT-ലൈസൻസുള്ള ഓപ്പൺ-സോഴ്സ് ഡ്രോയിംഗ് ഫ്രെയിംവർക്ക് ആണത്. ഔട്ട്ലൈൻ പരാജയങ്ങളുടെ ഒരു പൂർണ്ണ വിഭാഗം ഒഴിവാക്കുന്നതിനായി, കൂടുതൽ ഇരുണ്ട സ്വയം മുറിച്ചുകടക്കലുകളും മർദ്ദം കുറയുമ്പോൾ ചുരുങ്ങുന്ന അറ്റങ്ങളും ഞങ്ങൾ സ്വീകരിച്ചു.

228% സൂമിലുള്ള യഥാർത്ഥ ഡിവൈസ് സ്ക്രീൻഷോട്ട്. പല സ്ട്രോക്കുകളുടെയും ഇരുവശത്തും ചെറിയ കൊളുത്തുകൾ കാണാം.
സിന്തറ്റിക് രംഗങ്ങളിൽ കാണാത്ത കൊളുത്തുകൾ യഥാർത്ഥ കൈയെഴുത്ത് സൃഷ്ടിച്ചു
സിന്തറ്റിക് രംഗങ്ങളിൽ ഞങ്ങൾ നേരെ വരകൾ, വളവുകൾ, ചെറു ടാപ്പുകൾ, പിന്നോട്ടുള്ള സഞ്ചാരങ്ങൾ, മർദ്ദത്തിലെ മാറ്റങ്ങൾ, കുത്തനെയുള്ള തിരിവുകൾ എന്നിവ പരീക്ഷിച്ചു; എല്ലാം വൃത്തിയായി റെൻഡർ ചെയ്തു. പക്ഷേ യഥാർത്ഥ ചൈനീസ് കൈയെഴുത്തിൽ പല സ്ട്രോക്കുകളുടെയും തുടക്കത്തിലും അവസാനത്തിലും ഏകദേശം 1–3 പോയിന്റ് നീളമുള്ള കൊളുത്തുകൾ തുടർന്നും ഉണ്ടായി.
അതുകൊണ്ട് ആപ്പിൽ ഒരു സേവ് ബട്ടൺ ചേർത്ത് 29 പൂർണ്ണ സ്ട്രോക്കുകൾ രേഖപ്പെടുത്തി. ഓരോ സാമ്പിളിലും സ്ഥാനം, ആരം, മർദ്ദം, അസിമത്ത്, ആൾട്ടിറ്റ്യൂഡ്, ടൈംസ്റ്റാമ്പ്, UIKit estimation flags എന്നിവ സൂക്ഷിച്ചു. ഓഫ്ലൈൻ പ്രോഗ്രാം ആ JSON ഡീകോഡ് ചെയ്ത് ആപ്പ് ഉപയോഗിക്കുന്ന അതേ Stroke.swift, StrokeRenderer.swift, HighlighterStrokeBuilder.swift ഫയലുകൾ കംപൈൽ ചെയ്തു. കൊളുത്തുകൾ ഉൾപ്പെടെ, അതിന്റെ ഔട്ട്പുട്ട് ഡിവൈസ് സ്ക്രീൻഷോട്ടുമായി ഓരോ സ്ട്രോക്കിലും പൊരുത്തപ്പെട്ടു.
രേഖപ്പെടുത്തിയ ഇൻപുട്ട് മാത്രം ഉപയോഗിച്ച് ഓഫ്ലൈൻ റെൻഡറർ തകരാർ വീണ്ടും സൃഷ്ടിച്ചു. അതിനാൽ കാരണം ഡിസ്പ്ലേയുടെ പെരുമാറ്റത്തിലല്ല, സാമ്പിളുകളിലും ജ്യാമിതിയിലുമായിരുന്നു. റെൻഡററിലേക്ക് കടന്ന യഥാർത്ഥ സാമ്പിളുകൾ ഇപ്പോൾ നേരിട്ട് പരിശോധിക്കാമായിരുന്നു.
ടച്ച്ഡൗണിലും ലിഫ്റ്റ്-ഓഫിലും കണക്കാക്കിയ Pencil orientation ആകാം കാരണമെന്ന് ഞങ്ങൾ ആദ്യം കരുതി. ഡാറ്റ അത് തള്ളിക്കളഞ്ഞു. 29 സ്ട്രോക്കുകളിലുടനീളം ആദ്യത്തെയും അവസാനത്തെയും എട്ട് സാമ്പിളുകൾക്കിടയിൽ അസിമത്ത് പരമാവധി 0.09 radians-വും altitude പരമാവധി 0.02 radians-വും മാത്രമാണ് മാറിയത്; ആ iPad-ൽ എല്ലാ estimation flags-വും false ആയിരുന്നു. മർദ്ദവും ദിശയും പെട്ടെന്ന് മാറിയപ്പോഴും orientation സ്ഥിരമായി നിന്നു.
ഡാറ്റയിലെ വ്യക്തമായ ഇടവേളയിൽ നിന്നാണ് pressure floor ലഭിച്ചത്
രേഖപ്പെടുത്തിയ ഓരോ സ്ട്രോക്കിന്റെയും അവസാന സാമ്പിളിലെ മർദ്ദം 0.000 ആയിരുന്നു. എഴുതുമ്പോഴുള്ള സാമ്പിളുകൾ 0.01 അല്ലെങ്കിൽ അതിനുമുകളിലായിരുന്നു; Pencil ഉപരിതലം വിട്ടശേഷമുള്ള സാമ്പിളുകൾ 0.002 അല്ലെങ്കിൽ അതിൽ താഴെയും. വായുവിലുള്ള ആ സാമ്പിളുകൾ പലപ്പോഴും 2–7 പോയിന്റ് കൂടി നീണ്ടുനിന്നു, 0.8–9.0 പോയിന്റ് സഞ്ചരിച്ചു, അവയുടെ ദിശ എഴുതിയ സ്ട്രോക്കിൽ നിന്ന് ഏകദേശം 90 degrees മാറുകയും ചെയ്തു.
Stroke 2 ഇതിന്റെ പ്രവർത്തനം കാണിക്കുന്നു. അതിന്റെ ശരീരം 143 മുതൽ 180 degrees വരെയുള്ളിടത്ത് അവസാനിച്ചു. തുടർന്ന് കുറഞ്ഞ മർദ്ദമുള്ള tail −90 മുതൽ −67 degrees വരെ തിരിഞ്ഞ് 8.5 പോയിന്റ് കൂടി സഞ്ചരിച്ചു. ഔട്ട്ലൈൻ റെൻഡറർ വായുവിലുള്ള അവസാന പോയിന്റിനെ യഥാർത്ഥ endpoint ആയി കണക്കാക്കി; അതിനാൽ ആ പോയിന്റിലേക്കായി ഇടുങ്ങിയ ജ്യാമിതി നീണ്ടു.
അളന്ന മർദ്ദത്തിൽ എഴുത്തും വായുവിലുള്ള ചലനവും തമ്മിൽ ഏകദേശം ഒരു order of magnitude ഇടവേളയുണ്ട്. അതിനാൽ cutoff ആ ഇടവേളയ്ക്കുള്ളിൽ സ്ഥാപിച്ചു:
private static let pressureFloor: CGFloat = 0.005
രണ്ടറ്റങ്ങളിലുമുള്ള കുറഞ്ഞ മർദ്ദമുള്ള സാമ്പിളുകൾ മാത്രമേ നീക്കം ചെയ്യൂ. സ്ട്രോക്കിന്റെ നടുവിലുള്ള കുറഞ്ഞ മർദ്ദ സാമ്പിൾ അതിന്റെ ഭാഗമായിത്തന്നെ തുടരും. അളന്ന event boundary പിന്തുടരുന്ന ഈ നിയമം എഴുതിയ പാതയിൽ തിരുത്തൽ വരുത്തുന്നില്ല.

ട്രിമ്മിംഗിന് മുമ്പ് റെൻഡറർ വായുവിലുള്ള സാമ്പിളുകളിലാണ് ക്യാപ് ഉറപ്പിക്കുന്നത്. പച്ച ഡോട്ടുകൾ raw samples; ചുവന്ന വര generated outline ആണ്.

0.005-ൽ താഴെയുള്ള സാമ്പിളുകൾ മുറിച്ചുമാറ്റിയപ്പോൾ ക്യാപ് അവസാനമായി എഴുതിയ പോയിന്റിൽ അവസാനിക്കുന്നു. ഇപ്പോഴത്തെ സ്റ്റാമ്പ് റെൻഡററിലും ഈ pressure floor നിലനിൽക്കുന്നു.
ഈ floor വായുവിൽ നീളുന്ന കൊളുത്തുകൾ നീക്കി. 0.005-നു മുകളിലായി മർദ്ദം നിലനിന്ന ചെറിയ touchdown drags-ും lift-off arcs-ും എഴുതിയ ചലനമായതിനാൽ തുടർന്നു. ആ ചലനങ്ങളെ ഔട്ട്ലൈൻ മോഡലിൽ കൈകാര്യം ചെയ്യാനുള്ള ശ്രമമാണ് അടുത്ത ജ്യാമിതി ഘട്ടങ്ങളിലേക്ക് നയിച്ചത്.
മൂന്ന് ജ്യാമിതി എഞ്ചിനുകൾ പിഴവുകളെ ഒരു സ്ഥലത്തുനിന്ന് മറ്റൊരിടത്തേക്ക് മാറ്റി
ഒന്നാം തലമുറ: ഒരു ഔട്ട്ലൈൻ, ഒരു ഫിൽ
ആദ്യ pressure-sensitive എഞ്ചിൻ പരിചിതമായ pipeline സ്വീകരിച്ചു. ഒരു spine മിനുക്കി, ഇടത്-വലത് offsets കണക്കാക്കി, അവയെ ഒരു polygon ആക്കി ചേർത്ത് ഒരിക്കൽ fill ചെയ്തു. Apple Pencil-ന്റെ azimuth, altitude എന്നിവ നിയന്ത്രിക്കുന്ന ellipse ആയിരുന്നു nib; അതുകൊണ്ട് എഴുതുന്ന ദിശക്കനുസരിച്ച് cross-section മാറി. ചെറിയ ടാപ്പുകൾക്ക് വേറിട്ട shape ഉണ്ടായിരുന്നു; zero-winding pockets ഒഴിവാക്കാൻ flat caps-ൽ ചെറിയ asymmetries ഉപയോഗിച്ചു.
ഒരിക്കൽ മാത്രം ചെയ്ത ഫിൽ സ്ട്രോക്കിനുള്ളിലെ opacity accumulation പരിഹരിച്ചു, പക്ഷേ ഓരോ തിരിവിലും സാധുവായ polygon വേണമെന്ന നിബന്ധന ഉണ്ടാക്കി. Touchdown drags ക്യാപിനും ശരീരത്തിനും ഇടയിൽ wedges ഉണ്ടാക്കി. Backtracks വെളുത്ത crescent pockets സൃഷ്ടിക്കാമായിരുന്നു. കുത്തനെയുള്ള തിരിവുകളിൽ inner outline സ്വയം മുറിച്ചുകടന്ന് നിറയാത്ത notch ഉണ്ടാക്കാമായിരുന്നു.
രണ്ടാം തലമുറ: അറ്റങ്ങൾക്ക് സമീപമുള്ള ഔട്ട്ലൈൻ നന്നാക്കുക
രണ്ടാം എഞ്ചിൻ ഔട്ട്ലൈൻ നിലനിർത്തി, local repairs ചേർത്തു: backtrack trimming, ആദ്യകാല estimated properties-നുള്ള damping, endpoint straightening, transient-direction trimming, ചെറിയ cap extension. ഓരോ patch-വും പുനർനിർമ്മിച്ച ഒരു failure പരിഹരിച്ചു. ഒരുമിച്ച് അവ endpoint behavior-നെ പല thresholds-ുകളെയും windows-ുകളെയും ആശ്രയിക്കുന്നതാക്കി.
യഥാർത്ഥ എഴുത്ത് ആ windows-ിന് പുറത്തുള്ള കേസുകൾ പിന്നെയും ഉണ്ടാക്കി. സ്ഥിരമായ 24-point straightening window ചെറു സ്ട്രോക്കുകളിൽ ഉദ്ദേശപൂർവ്വം വരച്ച കൊളുത്തുകൾ മായ്ച്ചു. Adaptive window അവ സംരക്ഷിച്ചെങ്കിലും lift-off arcs ഇപ്പോഴും കണ്ണിൽപ്പെടുന്ന corners ആയി മാറി. Direction-aware trimming കൂടുതൽ transient motion നീക്കി; പക്ഷേ ഒരു രേഖപ്പെടുത്തിയ സ്ട്രോക്കിന്റെ യഥാർത്ഥമായി വളഞ്ഞ തുടക്കത്തിൽ നിന്ന് ഏകദേശം 2.5 പോയിന്റ് ഉപേക്ഷിക്കേണ്ടിവന്നു.
ഓരോ patch-വും ലക്ഷ്യമിട്ട കേസ് ശരിയാക്കി. എന്നിരുന്നാലും അതിന്റെ അടിയിലെ മോഡലിന് noisy, curved input-ലും സാധുവായി നിലനിൽക്കുന്ന ഒരു hard outline വേണമായിരുന്നു.
മൂന്നാം തലമുറ: clipped square caps ഉള്ള coverage union
മൂന്നാം എഞ്ചിൻ ഒരൊറ്റ contour നിർമ്മിക്കുന്നത് നിർത്തി. ഓരോ segment-നും ഒരു trapezoid-ും ഓരോ interior sample-നും ഒരു disc-ും grayscale mask-ൽ വരച്ചു; coverage union എടുത്ത ശേഷം highlighter color ഒരിക്കൽ പ്രയോഗിച്ചു. Renderer polygon winding-നെ ആശ്രയിക്കാതായതോടെ backtrack crescents, self-intersection darkening, zero-winding holes എന്നിവ ഇല്ലാതായി.
Union അറ്റങ്ങളെ വട്ടമാക്കി. അതിനാൽ രണ്ട് endpoint half-planes ഉപയോഗിച്ച് coverage clip ചെയ്ത് square caps തിരികെ കൊണ്ടുവന്നു. ഈ clip constant-pressure straight lines ശരിയാക്കിയെങ്കിലും കൂടുതൽ ഗുരുതരമായ പ്രശ്നം സൃഷ്ടിച്ചു: വളഞ്ഞ സ്ട്രോക്കിന്റെ body endpoint half-plane മുറിച്ചുകടക്കുന്നത് സാധുവായിരിക്കാം; cap clip അപ്പോൾ സ്ട്രോക്കിന്റെ മധ്യഭാഗം നീക്കം ചെയ്തു. Live input സമയത്ത് endpoint direction മാറിക്കൊണ്ടിരുന്നതിനാൽ clipped area നീങ്ങുകയും stroke flicker ചെയ്യുകയും ചെയ്തു.

Global cap constraint വളഞ്ഞ സ്ട്രോക്കിന്റെ body-യിലൂടെ മുറിച്ചുകടക്കുന്നു.

Endpoint-ിൽ നിന്ന് ഒരു half-width പരിധിക്കുള്ളിലെ primitives-ലേക്ക് മാത്രം cap clipping ചുരുക്കുമ്പോൾ ഈ സ്ട്രോക്ക് പുനഃസ്ഥാപിക്കാം.
Arc-length gate cap clipping-നെ local ആക്കി രേഖപ്പെടുത്തിയ എല്ലാ കേസുകളും ശരിയാക്കി. എന്നിരുന്നാലും ഒരു extreme synthetic hook-ൽ low-pressure tip clipped cap-നെ തൊടുന്നിടത്ത് ചെറിയ white notch തുടരുകയായിരുന്നു. മൂന്നാം എഞ്ചിനും വീണ്ടും ഒരു geometry failure-ന് പകരം മറ്റൊന്ന് സ്വീകരിച്ചു.
MaLiang കഠിനമായ അതിർത്തി നീക്കം ചെയ്യുന്നു
MaLiang ഒരു അടച്ച outline ഉപയോഗിക്കാതെ ആവർത്തിക്കുന്ന texture stamps കൊണ്ട് സ്ട്രോക്ക് നിർമ്മിക്കുന്നു. അതിന്റെ path generator അടുത്തടുത്ത sample midpoints-ിലൂടെ കടന്നുപോകുന്ന quadratic Bézier segments ഉപയോഗിക്കുന്നു; line renderer ആ പാതയിലൂടെ regular step-ൽ stamps ഇടുന്നു. Stroke-ന്റെ നീളത്തിൽ stamp size, rotation, color, opacity എന്നിവയെല്ലാം മാറ്റാം.
Soft stamp-ന് വേറിട്ട cap, join, winding rule എന്നിവയില്ല. ദിശ പെട്ടെന്ന് മാറിയാലും അത് overlapping marks-ുകളുടെ ഒരു sequence ആയി തുടരും. Backtracks empty polygon pocket ഉണ്ടാക്കില്ല; endpoint half-plane-ന് stroke-ന്റെ മധ്യം മുറിക്കാനും കഴിയില്ല, കാരണം ഈ model-ൽ endpoint clip ഇല്ല.
ഞങ്ങൾ എടുത്തത് code അല്ല, model ആണ്. ഇപ്പോഴത്തെ HighlighterStrokeBuilder നാല് പ്രവർത്തനങ്ങൾ ചെയ്യുന്നു:
0.005-ൽ താഴെ മർദ്ദമുള്ള endpoint samples മാത്രം നീക്കം ചെയ്യുക.- Midpoint quadratic Bézier segments ഉപയോഗിച്ച് positions smooth ചെയ്യുക.
- Arc length-ിലെ ഓരോ point-നും ഒരു circular stamp ഇടുക.
- Normalized pressure-ൽ നിന്ന് stamp diameter നിശ്ചയിച്ച് source-over alpha ഉപയോഗിച്ച് stamps composite ചെയ്യുക.
Builder 686 വരികളിൽ നിന്ന് 190 ആയി ചുരുങ്ങി. Azimuth, altitude, outline construction, union masks, endpoint direction windows, cap extension, cap clipping എന്നിവയെല്ലാം highlighter path-ൽ നിന്ന് നീങ്ങി. Input model അത് പിന്തുണയ്ക്കുന്നതിനാൽ Pencil orientation ഇപ്പോഴും രേഖപ്പെടുത്തുന്നു; എന്നാൽ highlighter ഇനി ആ fields വായിക്കുന്നില്ല.
MaLiang-ന്റെ pressure formula-യ്ക്ക് device calibration വേണമായിരുന്നു
MaLiang ഈ സമവാക്യത്തിന് തുല്യമായ ഒരു formula ഉപയോഗിച്ചാണ് stamp വലുപ്പം കണക്കാക്കുന്നത്:
force 0 മുതൽ 1 വരെയുള്ള പരിധിയിലെ പ്രയോജനകരമായ ഭാഗം ഉപയോഗിക്കുന്നു എന്നാണ് ഈ formula കരുതുന്നത്. ഞങ്ങളുടെ device data അങ്ങനെ ആയിരുന്നില്ല. ഏകദേശം 3,400 Apple Pencil samples-ൽ median pressure 0.047 ആയിരുന്നു; maximum 0.178. ഈ values formula-യിലേക്ക് നേരിട്ട് നൽകിയപ്പോൾ സാധാരണ എഴുത്ത് nominal brush size-നേക്കാൾ വളരെ നേർത്തതായി.
അതുകൊണ്ട് കണ്ടെടുത്ത median ചുറ്റും normalize ചെയ്ത് exponent പ്രയോഗിക്കുകയും ഫലം clamp ചെയ്യുകയും ചെയ്തു:
എഴുത്തിലെ median pressure ഇപ്പോൾ nominal 12-point diameter-ലേക്ക് map ചെയ്യുന്നു. വളരെ നേരിയ സ്പർശവും nominal size-ന്റെ 35%-ൽ ദൃശ്യമാകും; ശക്തമായ മർദ്ദം 120%-ൽ കൂടുതൽ വളരില്ല.
ഈ calibration MaLiang-ന്റേതല്ല; input device-ന്റെയും brush behavior-ന്റെയും ഭാഗമാണ്. സ്വന്തം pressure distribution അളക്കാതെ original formula പകർത്തിയിരുന്നെങ്കിൽ architecture അതേപടി നിന്നേനേ, പക്ഷേ brush തെറ്റായേനെ.
അറിയാവുന്ന overlap count-ൽ നിന്നാണ് ഓരോ stamp-ിന്റെയും alpha ലഭിച്ചത്
Overlapping translucent stamps-നായി MaLiang empirical expression alpha ÷ overlapping × 2.5 ഉപയോഗിക്കുന്നു. ഞങ്ങളുടെ brush-ന്റെ nominal diameter 12 points-ൽ സ്ഥിരമാണ്, stamp step 1 point ആണ്; അതിനാൽ centerline-ൽ ഏകദേശം 12 layers ലഭിക്കും. ഇവിടെ overlap count അറിയാമെന്നതിനാൽ compensation estimate ചെയ്യാതെ കണക്കാക്കാം.
Target stroke opacity
ആകയാൽ ഒരു stamp-ിന് വേണ്ടത്

രേഖപ്പെടുത്തിയ device paths വീണ്ടും പ്ലേ ചെയ്യുന്ന അന്തിമ renderer. Hooks, diagonal cuts, white pockets എന്നിവ ഇല്ല.
ഞങ്ങൾ സ്വീകരിച്ച രണ്ട് ചെലവുകൾ
Self-intersections കൂടുതൽ ഇരുണ്ടതാകും. Source-over composition ഓരോ stamp-ും എണ്ണുന്നു; അതേ പ്രദേശത്തിലൂടെ മുമ്പ് കടന്ന pass-ൽ പതിപ്പിച്ച stamps-ുകളും അതിൽപ്പെടുന്നു. Coverage-union engine ഇത് ഒഴിവാക്കിയിരുന്നു. എന്നിട്ടും ഈ ഇരുണ്ട overlap പ്രവചിക്കാവുന്നതും stroke shape അക്ഷതമായി നിലനിർത്തുന്നതുമായതിനാൽ ഞങ്ങൾ അത് സ്വീകരിച്ചു.
Pressure കുറയുമ്പോൾ endpoints ചുരുങ്ങുന്നു. യഥാർത്ഥ lift-off മർദ്ദം കുറയ്ക്കുകയും stamp diameter കുറയുകയും ചെയ്യുന്നതിനാൽ stroke full-width square cap-ൽ അവസാനിക്കാതെ taper ചെയ്യുന്നു. മൂന്ന് geometry engines-ലും square cap ഒരു ആവശ്യകതയായി ഞങ്ങൾ കണക്കാക്കിയിരുന്നു. അത് ഉപേക്ഷിച്ചതോടെ മുകളിലെ പല പരാജയങ്ങൾക്കും പിന്നിലെ clipping, endpoint machinery എന്നിവ നീങ്ങി; അതിനാൽ taper ചെയ്ത അറ്റം സ്വീകരിച്ചു.
അതിനാൽ ഞങ്ങൾ ഷിപ്പ് ചെയ്യുന്ന model മുമ്പത്തെവയെക്കാൾ കുറച്ച് കാര്യങ്ങളാണ് ചെയ്യുന്നത്. അളന്ന writing event സംരക്ഷിക്കുകയും, device calibration കഴിഞ്ഞുള്ള pressure-നോട് പ്രതികരിക്കുകയും, globally valid outline ആവശ്യമില്ലാതെ വളഞ്ഞതും self-crossing ആയതുമായ paths റെൻഡർ ചെയ്യുകയും ചെയ്യുന്നു. Chisel-shaped nib, പൂർണ്ണമായി square ആയ cap, raw samples-ുകൾക്കിടയിലെ കൃത്യമായ polyline എന്നിവയാണ് ഇതിനായി ഞങ്ങൾ വിട്ടുകൊടുത്ത സവിശേഷതകൾ.
Pressure floor ആണ് മറ്റ് പ്രോജക്റ്റുകളിലേക്ക് ഏറ്റവും നേരിട്ട് കൊണ്ടുപോകാവുന്ന ആശയം. 0.005 എന്ന മൂല്യം യഥാർത്ഥ input-ലെ രണ്ട് clusters-ിനിടയിലെ ഇടവേളയിൽ നിന്നാണ് വന്നത്: 0.01-ലും അതിനുമുകളിലുമുള്ള എഴുത്ത്, 0.002-ലും അതിൽ താഴെയുമുള്ള airborne tracking. അതേ രേഖപ്പെടുത്തിയ സ്ട്രോക്കുകൾ ഓരോ geometry repair-ും എവിടെയാണ് പരാജയപ്പെട്ടതെന്ന് കാണിച്ചു. ആ പരാജയങ്ങളാണ് stamp model-ലേക്കും അതിന്റെ രണ്ട് ചെലവുകളിലേക്കും ഞങ്ങളെ നയിച്ചത്.