@hatiolab/figure-model 0.1.30 โ†’ 0.1.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +2 -0
  2. package/dist/index.d.ts +12 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +11 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/release-contract.d.ts +2 -2
  7. package/dist/release-contract.d.ts.map +1 -1
  8. package/dist/release-contract.js +45 -3
  9. package/dist/release-contract.js.map +1 -1
  10. package/dist/types.d.ts +15 -4
  11. package/dist/types.d.ts.map +1 -1
  12. package/dist/types.js +15 -4
  13. package/dist/types.js.map +1 -1
  14. package/dist/v3-asset-types.d.ts +116 -0
  15. package/dist/v3-asset-types.d.ts.map +1 -0
  16. package/dist/v3-asset-types.js +2 -0
  17. package/dist/v3-asset-types.js.map +1 -0
  18. package/dist/v3-asset.d.ts +8 -0
  19. package/dist/v3-asset.d.ts.map +1 -0
  20. package/dist/v3-asset.js +135 -0
  21. package/dist/v3-asset.js.map +1 -0
  22. package/dist/v3-authoring-session.d.ts +119 -0
  23. package/dist/v3-authoring-session.d.ts.map +1 -0
  24. package/dist/v3-authoring-session.js +132 -0
  25. package/dist/v3-authoring-session.js.map +1 -0
  26. package/dist/v3-capabilities.d.ts +3 -0
  27. package/dist/v3-capabilities.d.ts.map +1 -0
  28. package/dist/v3-capabilities.js +221 -0
  29. package/dist/v3-capabilities.js.map +1 -0
  30. package/dist/v3-contract.d.ts +7 -0
  31. package/dist/v3-contract.d.ts.map +1 -0
  32. package/dist/v3-contract.js +12 -0
  33. package/dist/v3-contract.js.map +1 -0
  34. package/dist/v3-create.d.ts +25 -0
  35. package/dist/v3-create.d.ts.map +1 -0
  36. package/dist/v3-create.js +50 -0
  37. package/dist/v3-create.js.map +1 -0
  38. package/dist/v3-document.d.ts +5 -0
  39. package/dist/v3-document.d.ts.map +1 -0
  40. package/dist/v3-document.js +31 -0
  41. package/dist/v3-document.js.map +1 -0
  42. package/dist/v3-editor-workspace.d.ts +334 -0
  43. package/dist/v3-editor-workspace.d.ts.map +1 -0
  44. package/dist/v3-editor-workspace.js +130 -0
  45. package/dist/v3-editor-workspace.js.map +1 -0
  46. package/dist/v3-graph-types.d.ts +91 -0
  47. package/dist/v3-graph-types.d.ts.map +1 -0
  48. package/dist/v3-graph-types.js +2 -0
  49. package/dist/v3-graph-types.js.map +1 -0
  50. package/dist/v3-graph.d.ts +5 -0
  51. package/dist/v3-graph.d.ts.map +1 -0
  52. package/dist/v3-graph.js +631 -0
  53. package/dist/v3-graph.js.map +1 -0
  54. package/dist/v3-json.d.ts +13 -0
  55. package/dist/v3-json.d.ts.map +1 -0
  56. package/dist/v3-json.js +94 -0
  57. package/dist/v3-json.js.map +1 -0
  58. package/dist/v3-part-edit.d.ts +12 -0
  59. package/dist/v3-part-edit.d.ts.map +1 -0
  60. package/dist/v3-part-edit.js +53 -0
  61. package/dist/v3-part-edit.js.map +1 -0
  62. package/docs/assembly-constraints-v3.md +141 -0
  63. package/docs/prototypes/README.md +73 -0
  64. package/docs/prototypes/render-dryroom.py +60 -0
  65. package/docs/prototypes/render-full-dryroom.mjs +86 -0
  66. package/docs/prototypes/shapeassembly-probe-results.json +325 -0
  67. package/docs/prototypes/shapeassembly-probe.py +84 -0
  68. package/docs/prototypes/v3-asset-samples.mjs +15 -0
  69. package/docs/prototypes/v3-asset-store.mjs +52 -0
  70. package/docs/prototypes/v3-asset-store.test.mjs +59 -0
  71. package/docs/prototypes/v3-asset.mjs +1 -0
  72. package/docs/prototypes/v3-asset.schema.json +44 -0
  73. package/docs/prototypes/v3-asset.test.mjs +68 -0
  74. package/docs/prototypes/v3-authoring-session.mjs +1 -0
  75. package/docs/prototypes/v3-authoring-session.test.mjs +65 -0
  76. package/docs/prototypes/v3-capability-plan.mjs +1 -0
  77. package/docs/prototypes/v3-capability-plan.test.mjs +56 -0
  78. package/docs/prototypes/v3-capability-samples.mjs +23 -0
  79. package/docs/prototypes/v3-document.mjs +2 -0
  80. package/docs/prototypes/v3-document.schema.json +66 -0
  81. package/docs/prototypes/v3-document.test.mjs +55 -0
  82. package/docs/prototypes/v3-dryroom-mesh.mjs +60 -0
  83. package/docs/prototypes/v3-dryroom-mesh.test.mjs +30 -0
  84. package/docs/prototypes/v3-editor-browser.mjs +97 -0
  85. package/docs/prototypes/v3-editor-workspace.mjs +1 -0
  86. package/docs/prototypes/v3-editor-workspace.test.mjs +35 -0
  87. package/docs/prototypes/v3-feature-pattern.test.mjs +131 -0
  88. package/docs/prototypes/v3-full-conveyor.mjs +60 -0
  89. package/docs/prototypes/v3-full-conveyor.test.mjs +61 -0
  90. package/docs/prototypes/v3-full-dryroom.mjs +67 -0
  91. package/docs/prototypes/v3-full-dryroom.test.mjs +54 -0
  92. package/docs/prototypes/v3-full-forklift.mjs +40 -0
  93. package/docs/prototypes/v3-full-forklift.test.mjs +37 -0
  94. package/docs/prototypes/v3-full-robot.mjs +35 -0
  95. package/docs/prototypes/v3-full-robot.test.mjs +68 -0
  96. package/docs/prototypes/v3-kernel.mjs +147 -0
  97. package/docs/prototypes/v3-kernel.test.mjs +144 -0
  98. package/docs/prototypes/v3-layout.test.mjs +281 -0
  99. package/docs/prototypes/v3-linear-comparison.py +183 -0
  100. package/docs/prototypes/v3-more-samples.test.mjs +182 -0
  101. package/docs/prototypes/v3-payload-collision.mjs +54 -0
  102. package/docs/prototypes/v3-payload-collision.test.mjs +68 -0
  103. package/docs/prototypes/v3-payload-fit.mjs +58 -0
  104. package/docs/prototypes/v3-payload-fit.test.mjs +59 -0
  105. package/docs/prototypes/v3-repeated-binding.mjs +13 -0
  106. package/docs/prototypes/v3-repeated-binding.test.mjs +46 -0
  107. package/docs/prototypes/v3-runtime-browser.mjs +76 -0
  108. package/docs/prototypes/v3-samples.test.mjs +144 -0
  109. package/docs/prototypes/v3-semantics.test.mjs +55 -0
  110. package/docs/prototypes/v3-spatial-plan.test.mjs +102 -0
  111. package/docs/prototypes/v3-typed-plan.mjs +3 -0
  112. package/docs/prototypes/v3-typed-plan.test.mjs +70 -0
  113. package/docs/prototypes/v3-typed-repeat.test.mjs +96 -0
  114. package/docs/v3-asset-persistence.md +66 -0
  115. package/docs/v3-authoring-transactions.md +57 -0
  116. package/docs/v3-capability-bindings.md +109 -0
  117. package/docs/v3-common-kernel-experiment.md +116 -0
  118. package/docs/v3-core-semantics.md +303 -0
  119. package/docs/v3-cutover.md +27 -0
  120. package/docs/v3-design.md +388 -0
  121. package/docs/v3-document-contract.md +55 -0
  122. package/docs/v3-dryroom-profile-validation.md +87 -0
  123. package/docs/v3-editor-integration.md +59 -0
  124. package/docs/v3-full-conveyor-validation.md +69 -0
  125. package/docs/v3-full-dryroom-validation.md +55 -0
  126. package/docs/v3-full-forklift-validation.md +41 -0
  127. package/docs/v3-full-robot-validation.md +64 -0
  128. package/docs/v3-layout-system.md +318 -0
  129. package/docs/v3-minimal-model.md +255 -0
  130. package/docs/v3-operator-contracts.md +148 -0
  131. package/docs/v3-payload-collision-validation.md +42 -0
  132. package/docs/v3-payload-contact-validation.md +56 -0
  133. package/docs/v3-repeated-binding-validation.md +42 -0
  134. package/docs/v3-research-review.md +160 -0
  135. package/docs/v3-runtime-extraction.md +107 -0
  136. package/docs/v3-sample-validation-expanded.md +106 -0
  137. package/docs/v3-sample-validation.md +97 -0
  138. package/docs/v3-shapeassembly-reproduction.md +99 -0
  139. package/docs/v3-spatial-contracts.md +84 -0
  140. package/docs/v3-status.md +41 -0
  141. package/docs/v3-storage-integration.md +58 -0
  142. package/docs/v3-typed-repeat-contracts.md +79 -0
  143. package/package.json +1 -1
@@ -0,0 +1,255 @@
1
+ # Figure v3 ์ตœ์†Œ ์‹คํ–‰ ๋ชจ๋ธ โ€” r2 ์„ค๊ณ„ ํ›„๋ณด
2
+
3
+ > ํ˜„์žฌ ๊ตฌํ˜„ยท๊ฒ€์ฆยท์ œํ’ˆ ์—ฐ๊ฒฐ ์ƒํƒœ๋Š” [V3 ํ†ตํ•ฉ ํ˜„ํ™ฉ](v3-status.md)์„ ๋”ฐ๋ฅธ๋‹ค. ๋ณธ๋ฌธ์˜ ๋‹จ๊ณ„๋ณ„ ์—ฐ๊ตฌ/๊ฒ€์ฆ ๊ธฐ๋ก์€ ์ œํ’ˆ ์ „์ฒด ์™„๋ฃŒ ์„ ์–ธ์ด ์•„๋‹ˆ๋‹ค.
4
+
5
+ > ์„ค๊ณ„ ๋ฐฉํ–ฅ์€ [r3 ํ•ต์‹ฌ ์˜๋ฏธ๋ก  ๊ธฐ์ค€์•ˆ](v3-core-semantics.md)์œผ๋กœ ๋Œ€์ฒดํ•œ๋‹ค.
6
+ > ์ด ๋ฌธ์„œ๋Š” ๊ณผ๊ฑฐ ๊ฐ€์„ค๊ณผ ์‹คํ—˜ ๊ทผ๊ฑฐ๋กœ ๋ณด์กดํ•˜๋ฉฐ ํ˜„์žฌ ๋ช…์„ธ์™€ ํ˜ผ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
7
+
8
+ > ์ฑ„ํƒ ๋ณด๋ฅ˜: [์„ ํ–‰ ์—ฐ๊ตฌ ๊ฒ€ํ† ](v3-research-review.md)๋ฅผ ๋จผ์ € ๋”ฐ๋ฅธ๋‹ค.
9
+ > ์•„ํ•€ DAG๋งŒ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฐฐ์น˜/์šด๋™ ๋ถ€๋ชจ๋ฅผ ์ผ์น˜์‹œํ‚ค๋Š” ์„ ํƒ๋„ ๋น„๊ต ๊ฒ€์ฆ ์ „์˜ ๊ฐ€์„ค์ด๋‹ค.
10
+ > [์‹ค์ œ ์ƒ˜ํ”Œ ๋Œ€์ž… ๊ฒ€์ฆ](v3-sample-validation.md): ์ปจ๋ฒ ์ด์–ด์˜ ๊ฐ€๋ณ€ ๋ฐ˜๋ณต์„ ํ›„์† ๋ฒ”์œ„๋กœ
11
+ > ๋ฏธ๋ฃจ๋ฉด ๊ธฐ์กด ๊ธฐ๋Šฅ์„ ๋ณด์กดํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์‹ค์ œ ๋‹จ๋ฉด feature์™€ ๋ณตํ•ฉ ์šด๋™ migration๋„ ๋ฏธ์™„์ด๋‹ค.
12
+ > [16์ข… ํ™•๋Œ€ ๊ฒ€์ฆ](v3-sample-validation-expanded.md): ์ƒํƒœ ๊ธฐ๋ฐ˜ ํ˜•์ƒ ๋ณ€ํ™”(G(d,q)),
13
+ > ์›ํ˜•๊ณผ ๋ฐ”๋‹ฅ ์ ‘์ด‰์˜ ๋ถ„๋ฆฌ, ๊ณ ์ • ๊ฐœ์ˆ˜/๊ณ ์ • pitch ๋ฐ˜๋ณต์˜ ๊ตฌ๋ถ„๋„ ํ•„์ˆ˜ ๋ณด์™„์‚ฌํ•ญ์ด๋‹ค.
14
+ > ํ˜„์žฌ์˜ ์•„ํ•€ ์น˜์ˆ˜ + ๊ฐ•์ฒด ์šด๋™๋งŒ์œผ๋กœ ๊ธฐ์กด ์ƒ˜ํ”Œ ์ „๋ถ€๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค๋Š” ์ฃผ์žฅ์€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค.
15
+ > [๊ณตํ†ต ์ปค๋„ ์‹คํ—˜](v3-common-kernel-experiment.md): 213๊ฐœ ํฌ๊ธฐยท์ƒํƒœ ์กฐํ•ฉ์„ ์‹คํ–‰ํ–ˆ๋‹ค.
16
+ > ๋ฐ˜๋ณต ๋ฐฐ์น˜์™€ ๊ฐœ๋ณ„ ํ˜•์ƒ ํšŒ์ „ ์ˆœ์„œ, ์ƒํƒœ ๊ธฐ๋ฐ˜ geometry๊ฐ€ ์ถ”๊ฐ€ ๊ณ„์•ฝ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ฌ๋‹ค.
17
+ > ๋ถ€๋ถ„ ๋ชจ๋ธ/proxy ์‹คํ—˜์ด๋ฉฐ ์ตœ์ข… ๋ช…์„ธ๊ฐ€ ์•„๋‹ˆ๋‹ค.
18
+
19
+ 2026-09-20. **๊ฒ€ํ†  ์ค‘์ธ ํ›„๋ณด์ด๋ฉฐ v3 ์ถœํ•˜ ๋ช…์„ธ๋‚˜ ์ œํ’ˆ ๊ตฌํ˜„ ์™„๋ฃŒ๊ฐ€ ์•„๋‹ˆ๋‹ค.**
20
+ ์‚ฌ์šฉ์ž๊ฐ€ Flex/Grid๋ฅผ ๋„์ž… ์š”๊ตฌ๊ฐ€ ์•„๋‹Œ ์‚ฌ๊ณ ์˜ ์˜ˆ์‹œ๋กœ ์ •์ •ํ•œ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•œ๋‹ค.
21
+ ์ด ๋ฌธ์„œ๋Š” r1์˜ ์ปจํ…Œ์ด๋„ˆ ์ค‘์‹ฌ ์ ‘๊ทผ์„ ๋Œ€์ฒดํ•˜๋Š” ๋ฐฉํ–ฅ์ด๋‹ค. r1 ๋ฌธ์„œ๋Š” ๋น„๊ตยท๋ฐ˜๋ก€ ๊ธฐ๋ก์œผ๋กœ ๋ณด์กดํ•œ๋‹ค.
22
+ ์–ด๋–ค ๊ธฐ๋Šฅ๋„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์ด ์ตœ์†Œ ๋ชจ๋ธ๋กœ ํ•„์š”ํ•œ ์‚ฌ๋ก€๊ฐ€ ์‹ค์ œ๋กœ ํ‘œํ˜„๋˜๋Š”์ง€ ๊ฒ€์ฆํ•œ๋‹ค.
23
+
24
+ ## 1. ์ถœ๋ฐœ์ : ๊ณต๊ฐ„ ๋ฐฐ์ •๋„ ์œ ์ผํ•œ ์›๋ฆฌ๋Š” ์•„๋‹ˆ๋‹ค
25
+
26
+ โ€œ๋ถ€๋ชจ๊ฐ€ ๊ณต๊ฐ„์„ ๋ฐฐ์ •ํ•œ๋‹คโ€๋Š” ์„ค๋ช…์€ ์„ ๋ฐ˜ยท๋ฌธ์ง ๋ฐฐ์—ด์—๋Š” ์ข‹์ง€๋งŒ ๋ชจ๋“  ๋ถ€ํ’ˆ์— ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
27
+ ๋กค๋Ÿฌ์— ํ•„์š”ํ•œ ๊ฒƒ์€ ๊ธธ์ด์™€ ๋ฐ˜์ง€๋ฆ„์ด๊ณ , ๋žจํ”„์— ํ•„์š”ํ•œ ๊ฒƒ์€ ๊ณ ์ • ์น˜์ˆ˜์™€ ๋ถ€์ฐฉ ์œ„์น˜๋‹ค.
28
+ ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ๋ณด์ด์ง€ ์•Š๋Š” ์ปจํ…Œ์ด๋„ˆยทslotยทfit ๋‹จ๊ณ„๋ฅผ ํ•„์ˆ˜๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ณต์žก์„ฑ์„ ์˜ฎ๊ธฐ๋Š” ์ผ์ด๋‹ค.
29
+
30
+ ํ•ต์‹ฌ ์งˆ๋ฌธ์„ ๋‘ ๊ฐ€์ง€๋กœ ์ค„์ธ๋‹ค.
31
+
32
+ 1. **ํ˜•์ƒ์„ ๋งŒ๋“œ๋Š” ์น˜์ˆ˜๋Š” ์–ด๋””์„œ ์˜ค๋Š”๊ฐ€?**
33
+ 2. **๊ทธ ํ˜•์ƒ์€ ๋ฌด์—‡์„ ๊ธฐ์ค€์œผ๋กœ ๋†“์ด๋Š”๊ฐ€?**
34
+
35
+ ํ˜•์ƒ์„ ๋งŒ๋“œ๋Š” ๊ทœ์น™๊ณผ ๊ฐ•์ฒด ๋ฐฐ์น˜๋Š” ์ˆ˜ํ•™์ ์œผ๋กœ ๋‹ค๋ฅธ ์ผ์ด๋‹ค. ์ด๋ฅผ ํ•œ ์†์„ฑ์œผ๋กœ ํ•ฉ์น˜์ง€๋Š” ์•Š๋Š”๋‹ค.
36
+ ํŽธ๋ฆฌํ•œ UI ๋ช…์นญ์˜ ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ €์žฅ๋˜๋Š” ๋…๋ฆฝ ๊ทœ์น™๊ณผ ๊ทœ์น™ ๊ฐ„ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๋‹ค.
37
+
38
+ ## 2. ์œ ์ง€/์ œ๊ฑฐ/๋ณด๋ฅ˜ ๊ฒฐ์ •
39
+
40
+ | ํ•ญ๋ชฉ | r2 ๊ฒฐ์ • | ์ด์œ  |
41
+ | --- | --- | --- |
42
+ | ๊ฐ’๋‹น ํ•˜๋‚˜์˜ ์ •์˜, ์ˆœํ™˜ ๊ฒ€์‚ฌ | ์œ ์ง€ | ์ถฉ๋Œ์„ ์šฐ์„ ์ˆœ์œ„๋กœ ์ˆจ๊ธฐ์ง€ ์•Š๋Š”๋‹ค |
43
+ | ์ด๋ฆ„ ์žˆ๋Š” ํ˜•์ƒ ๊ธฐ์ค€์ /์ขŒํ‘œ๊ณ„ | ์œ ์ง€ | ๋ถ€์ฐฉ ๋Œ€์ƒ์ด ์‹ค์ œ ํ˜•์ƒ๊ณผ ๊ฐ™์€ ์น˜์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค |
44
+ | ์ปจํ…Œ์ด๋„ˆ/slot/fit ์˜๋ฌดํ™” | ์ œ๊ฑฐ | ๋‹จ๋… ํ˜•์ƒยท๋ถ€์ฐฉ์— ๋ถˆํ•„์š”ํ•œ ๋‹จ๊ณ„๋‹ค |
45
+ | Flex/Grid/absolute/fixed ๋ชจ๋“œ | ํ•ต์‹ฌ ํ˜•์‹์—์„œ ์ œ๊ฑฐ | ์ขŒํ‘œ/๋ฐฐ์—ด/๋ถ„ํ• ์€ ๋™์ผํ•œ ์น˜์ˆ˜ยท๋ฐฐ์น˜ ์ •์˜๋กœ ํ‘œํ˜„ํ•œ๋‹ค |
46
+ | intrinsic/basis/preferred/allocated ํฌ๊ธฐ ์ฒด๊ณ„ | ์ œ๊ฑฐ | ์„œ๋กœ ๋‹ค๋ฅธ ํฌ๊ธฐ์˜ ์ธก์ •ยท๋ฐ˜์˜ ๊ทœ์น™์ด ๋ถˆ์™„์ „ํ–ˆ๋‹ค |
47
+ | ์ž๋™ grow/shrink, auto ๋‹ค์ค‘ span | ๋ณด๋ฅ˜ | ๋ช…์‹œ ์˜๋„ ์—†์ด ๊ณต๊ฐ„ ์žฌ๋ฐฐ๋ถ„์„ ์ถ”์ธกํ•˜์ง€ ์•Š๋Š”๋‹ค |
48
+ | ํ˜•์ƒ ์น˜์ˆ˜ ์œ ์ง€ยท์›ํ˜• ์œ ์ง€ | ์ง€์› ์š”๊ตฌ ์œ ์ง€ | geometry ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ •์˜๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค |
49
+ | ์šด๋™ | ๋ณ„๋„ ์ƒํƒœ ์ž…๋ ฅ์œผ๋กœ ์œ ์ง€ | ํฌ๊ธฐ ๋ณ€๊ฒฝ๊ณผ ๊ฐ•์ฒด ์šด๋™์„ ์„ž์ง€ ์•Š๋Š”๋‹ค |
50
+ | ๋Ÿฐํƒ€์ž„ ๊ฐœ์ˆ˜ ๋ณ€ํ™” | ํ›„์† ๋ฒ”์œ„ | ํ˜•์ƒ/๋ถ€์ฐฉ/์™ธ๋ถ€ ์ฐธ์กฐ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ณ„์•ฝ์ด ๋จผ์ € ํ•„์š”ํ•˜๋‹ค |
51
+ | ์ผ๋ฐ˜ ์ œ์•ฝ solver | ๋„์ž…ํ•˜์ง€ ์•Š์Œ | ์—ฐ๋ฆฝ ์ œ์•ฝ ๋Œ€์‹  ๋ฐฉํ–ฅ์ด ์ •ํ•ด์ง„ ๊ณ„์‚ฐ์œผ๋กœ ์‹œ์ž‘ํ•œ๋‹ค |
52
+
53
+ ์ด ์„ ํƒ์€ ์ง€์› ๋ฒ”์œ„๋ฅผ ์ขํžŒ๋‹ค. ์ž„์˜ ์กฐ๊ฑด์˜ ์ตœ์  ๋ฐฐ์น˜๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ๋Š” ์ œํ’ˆ์ด๋ผ๊ณ  ์ฃผ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
54
+ ๋Œ€์‹  ์ž์ฃผ ์“ฐ๋Š” ์ €์ž‘ ์˜๋„์— ๋Œ€ํ•ด ์•ˆ์ •๋œ ์ž‘์€ ๊ณ„์‚ฐ์„ ์ƒ์„ฑํ•œ๋‹ค.
55
+ ์ž์‚ฐ ์‚ฌ๋ก€์—์„œ ์ˆ˜์‹์ด๋‚˜ ์˜ˆ์™ธ๊ฐ€ ํญ์ฆํ•˜๋ฉด r2๋„ ๊ธฐ๊ฐํ•œ๋‹ค.
56
+
57
+ ## 3. ์‹คํ–‰ ์ •๋ณธ: ์น˜์ˆ˜ ๊ฐ’๊ณผ ๋ฐฐ์น˜ frame
58
+
59
+ ### 3.1 ์น˜์ˆ˜ ๊ฐ’
60
+
61
+ ์น˜์ˆ˜ ๊ฐ’์€ ์ƒ์ˆ˜ ๋˜๋Š” ์ด๋ฏธ ์ •์˜๋œ ์น˜์ˆ˜์˜ ์„ ํ˜• ๊ฒฐํ•ฉ์ด๋‹ค. ๋‹จ์œ„๋Š” mm๋‹ค.
62
+ ๊ธฐ๋ณธ ์ž…๋ ฅ์€ width/height/depth. ๋ถ€ํ’ˆ ์™ธ๊ณฝ๋ฟ ์•„๋‹ˆ๋ผ ๋‘๊ป˜ยท๋ฐ˜์ง€๋ฆ„ยท๊ฐœ๊ตฌ๋ถ€ ํญ๋„ ๊ฐ™์€ ๊ฐ’์ด๋‹ค.
63
+
64
+ ```ts
65
+ type LengthDefinition = {
66
+ constantMm: number
67
+ terms: { ref: LengthId; coefficient: number }[]
68
+ }
69
+ ```
70
+
71
+ ๊ฐ LengthId๋Š” ํ•˜๋‚˜์˜ ์ •์˜๋งŒ ๊ฐ€์ง„๋‹ค. ๋ชจ๋“  coefficient๋Š” ์œ ํ•œํ•œ ๋ฌด์ฐจ์› ์ƒ์ˆ˜๋‹ค.
72
+ ์ฐธ์กฐ ์—†๋Š” ๊ฐ’๋„ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์ €์žฅํ•œ๋‹ค. ํ‘œ์‹œ ์ด๋ฆ„๊ณผ id๋Š” ๋ถ„๋ฆฌํ•œ๋‹ค.
73
+ ๋ฒ”์œ„ ์กฐ๊ฑด์€ ์ •์˜๋ฅผ ๋ฎ์–ด์“ฐ๋Š” clamp๊ฐ€ ์•„๋‹ˆ๋ผ ๋ณ„๋„์˜ ๊ฒ€์ฆ์‹์ด๋‹ค.
74
+ ์˜ˆ: thickness > 0, width - 2*thickness > 0.
75
+ ๋‚ด๋ถ€ ์ขŒํ‘œ/offset ๊ฐ’์€ ์Œ์ˆ˜์ผ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋“  LengthId๊ฐ€ ์–‘์ˆ˜๋ผ๋Š” ๊ทœ์น™์€ ์—†๋‹ค.
76
+
77
+ ์ด ๋‹จ๊ณ„์—์„œ min/max ์‹, ๋‘ ๋ณ€์ˆ˜์˜ ๊ณฑ/๋‚˜๋ˆ—์…ˆ, ์ž„์˜ ์Šคํฌ๋ฆฝํŠธ๋Š” ์—†๋‹ค.
78
+ ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ •์˜์˜ DAG๋ฅผ ํŽผ์น˜๋ฉด ๋ชจ๋“  ๊ฐ’์€ ์ž…๋ ฅ d์— ๋Œ€ํ•œ ์•„ํ•€์‹ aยทd+b๋‹ค.
79
+ parameter๋งˆ๋‹ค min/max๋ฅผ ์ž๋™ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ถˆ๊ฐ€๋Šฅํ•œ ์น˜์ˆ˜๋Š” ์›์ธ๊ณผ ํ•จ๊ป˜ ์ง„๋‹จํ•œ๋‹ค.
80
+
81
+ ### 3.2 ๋ฐฐ์น˜ frame
82
+
83
+ ํ˜•์ƒ์€ ํ•˜๋‚˜์˜ ์ •์ง€ frame์„ ๊ฐ€์ง„๋‹ค. frame์€ ํ•˜๋‚˜์˜ ๊ธฐ์ค€ frame๊ณผ ์ƒ๋Œ€ ๋ณ€ํ™˜์œผ๋กœ ์ •์˜ํ•œ๋‹ค.
84
+ ๊ธฐ์ค€์€ Figure ์›์  ๋˜๋Š” ๋‹ค๋ฅธ ํ˜•์ƒ์˜ ์ด๋ฆ„ ์žˆ๋Š” feature frame์ด๋‹ค.
85
+ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋ถ€ํ’ˆ ๋ฌถ์Œ์€ ๋ณ€ํ™˜ ์—†๋Š” ์ €์ž‘ ๊ทธ๋ฃน์ด๋‹ค.
86
+
87
+ ```text
88
+ B_i(d) = B_parent(d) ยท T(offset_i(d)) ยท R_i
89
+ ```
90
+
91
+ offset์€ ๊ธฐ์ค€ frame ์ขŒํ‘œ์—์„œ์˜ mm ๊ฐ’ 3๊ฐœ๋‹ค. R์€ ์น˜์ˆ˜์™€ ๋ฌด๊ด€ํ•œ ์ •๊ทœํ™” quaternion์ด๋‹ค.
92
+ frame๋งˆ๋‹ค parent์™€ ์ƒ๋Œ€ ๋ณ€ํ™˜ ์ •์˜๋Š” ํ•˜๋‚˜๋‹ค. ๋‘ ๋ฐฐ์น˜ ๋ชจ๋“œ๋ฅผ ๊ฒน์ณ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
93
+ Figure ์›์ ์€ ๋ฐ”๋‹ฅ ์ค‘์‹ฌ, Y ์œ„์ชฝ, ์˜ค๋ฅธ์† ์ขŒํ‘œ๊ณ„๋‹ค.
94
+ geometry provider์˜ ๋ถ€ํ’ˆ local ์›์ ์€ ์ค‘์‹ฌ์ด๋ฉฐ ๋‹ค๋ฅธ origin์ด ํ•„์š”ํ•œ provider๋Š” ๋ช…์‹œ ๋ณ€ํ™˜ํ•œ๋‹ค.
95
+
96
+ feature๋„ ๊ฐ™์€ frame ๊ด€๊ณ„๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์‹ค์ œ geometry๊ฐ€ ์“ฐ๋Š” ์น˜์ˆ˜์—์„œ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.
97
+ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌธํ‹€ ์ƒ๋‹จ frame์˜ Y=height/2๋Š” ๊ทธ ๋ฌธํ‹€ geometry์™€ ๊ฐ™์€ height ๊ฐ’์ด๋‹ค.
98
+ ํ‘œ์‹œ/๋ถ„์„์„ ์œ„ํ•ด ๋งŒ๋“  ๋ณ„๋„ AABB๋ฅผ ์‹ค์ œ ๋ฉด์ด๋ผ๊ณ  ๊ฐ„์ฃผํ•˜์ง€ ์•Š๋Š”๋‹ค.
99
+
100
+ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์น˜์ˆ˜ ์ฐธ์กฐ์™€ frame/feature ์˜์กด์„ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•œ๋‹ค.
101
+ feature๋ฅผ ๊ฐ€์ง„ ๋ถ€ํ’ˆ์„ ๊ทธ feature ์ž์ฒด์— ๋ถ€์ฐฉํ•˜๋Š” ์ˆœํ™˜์€ ๊ฑฐ์ ˆํ•œ๋‹ค.
102
+ ๋‹ค๋ฅธ ๋ถ€ํ’ˆ์˜ ์น˜์ˆ˜๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๊ณ  ๊ทธ ๋ถ€ํ’ˆ์˜ ์šด๋™๊นŒ์ง€ ์ž๋™ ์ƒ์†ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.
103
+
104
+ ### 3.3 ํ˜•์ƒ provider ๊ณ„์•ฝ โ€” ๋ฐฐ์น˜ ์—”์ง„๊ณผ์˜ ๊ฒฝ๊ณ„
105
+
106
+ geometry ์ž…๋ ฅ์€ ์ด๋ฏธ ๊ฒฐ์ •๋œ ์˜๋ฏธ ์žˆ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋‹ค.
107
+ '๋ฐ›์€ ์ƒ์ž์— ์–ด๋–ป๊ฒŒ๋“  ๋งž์ถ˜๋‹ค'๋Š” ๋‘ ๋ฒˆ์งธ sizing ์—”์ง„์„ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค.
108
+
109
+ | ๋Œ€ํ‘œ ํ˜•์ƒ | ์ž…๋ ฅ | ๋ฐ˜๋“œ์‹œ ์ง€ํ‚ฌ ๊ด€๊ณ„ |
110
+ | --- | --- | --- |
111
+ | ์ƒ์ž | width, height, depth | ํ‘œ๋ฉด๊ณผ ยฑ๋ฐ˜์น˜์ˆ˜ feature์˜ ์ผ์น˜ |
112
+ | ์›ํ˜• ๋กค๋Ÿฌ | radius, length | ๋‘ ๋‹จ๋ฉด ์ถ•์ด ๊ฐ™์€ radius ์‚ฌ์šฉ |
113
+ | ์‚ฌ๊ฐ ์ค‘๊ณต ํ”„๋ ˆ์ž„ | outerWidth, outerHeight, depth, wall | innerWidth=outerWidthโˆ’2wall, innerHeight=outerHeightโˆ’2wall |
114
+ | polygon ๋Œ์ถœ | profile ์ขŒํ‘œ, depth | ์•ˆ์ •๋œ profile id; ์œ ํšจ ๋‹จ๋ฉด๊ณผ ๋Œ์ถœ ๋‘๊ป˜ |
115
+
116
+ ๋กค๋Ÿฌ ์ถ•์€ provider-local Z๋กœ ์ •ํ•˜๊ณ  ์žฅ๋ฉด ๋ฐฉํ–ฅ์€ ๋ฐฐ์น˜ frame์—์„œ ํšŒ์ „ํ•œ๋‹ค.
117
+ ํ”„๋ ˆ์ž„์˜ opening feature๋Š” ์‹ค์ œ ์•ˆ์ชฝ ๋ฉด๊ณผ ๋™์ผ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
118
+ ์ผ๋ฐ˜ polygon์˜ ์•ˆ์ชฝ offsetยทrounding ์œ ํšจ์„ฑ์€ ์•„ํ•€์‹๋งŒ์œผ๋กœ ์ฆ๋ช…๋˜์ง€ ์•Š๋Š”๋‹ค.
119
+ ๋ฏธ์ง€์› feature๋ฅผ bounds๋กœ ๋Œ€์ฒดํ•˜์ง€ ์•Š๊ณ  provider ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
120
+
121
+ ์ด ํ‘œ๋Š” ๊ณ„์•ฝ์˜ ์˜ˆ์‹œ๋‹ค. ๊ธฐ์กด ์—ฌ์„ฏ primitive, hollow, round, material, capability,
122
+ label/port/slot์„ ๋ชจ๋‘ ํฌ๊ด„ํ•˜๋Š” provider catalog๋ฅผ ์™„์„ฑํ•˜๊ธฐ ์ „์—๋Š” v3 ์ „ํ™˜์„ ํ™•์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
123
+ ์™ธ๋ถ€ capability slot๊ณผ ๋ฐฐ์น˜ ๊ณ„์‚ฐ์„ ์œ„ํ•œ ๊ฐ€์ƒ slot์„ ํ˜ผ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
124
+
125
+ ## 4. ํŽธ์˜ ์กฐ์ž‘์€ ์‹์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด์ง€ ์ถ”๊ฐ€ ์‹คํ–‰ ๊ทœ์น™์ด ์•„๋‹ˆ๋‹ค
126
+
127
+ UI์˜ ์กฐ์ž‘์€ '์น˜์ˆ˜ ์œ ์ง€', '๋‘ ๋ฉด ์‚ฌ์ด ์ฑ„์šฐ๊ธฐ', '๊ท ๋“ฑ ๋‚˜๋ˆ„๊ธฐ', '์ด ๋ฉด์— ๋ถ™์ด๊ธฐ'๋‹ค.
128
+ AI๋„ ๊ฐ™์€ typed transaction์„ ์ƒ์„ฑํ•œ๋‹ค. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ˆ˜์‹์„ ์ž‘์„ฑํ•˜๋„๋ก ์š”๊ตฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
129
+
130
+ ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ™์€ ์ขŒํ‘œ๊ณ„์˜ ๊ฒฝ๊ณ„ l,h ์‚ฌ์ด์—์„œ ์—ฌ๋ฐฑ a,b๋ฅผ ๋‚จ๊ธด๋‹ค๋ฉด:
131
+
132
+ ```text
133
+ size = h-l-a-b
134
+ center = (l+h+a-b)/2
135
+ ```
136
+
137
+ ํญ L์„ ๊ณ ์ • ๊ฐœ์ˆ˜ n, ๊ฐ„๊ฒฉ g, ์–‘๋ ์—ฌ๋ฐฑ a,b๋กœ ๋™์ผ ๋ถ„ํ• ํ•˜๋ฉด:
138
+
139
+ ```text
140
+ itemSize = (L-a-b-(n-1)*g)/n
141
+ center(i) = -L/2+a+itemSize/2+i*(itemSize+g) 0โ‰คi<n
142
+ ```
143
+
144
+ n์€ ์ €์ž‘ ์‹œ ๊ณ ์ •ํ•œ ์–‘์˜ ์ •์ˆ˜์ด๋ฏ€๋กœ 1/n์€ ์ƒ์ˆ˜๋‹ค.
145
+ ๊ธฐ๋ณธ UI์—์„œ๋Š” ๋ถ„ํ•  ์ˆ˜๋ฅผ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. '๋‘ ๋ฌธ์ง'๊ณผ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ์ด ์ •ํ•œ๋‹ค.
146
+ ๋น„๊ท ๋“ฑ ๋ถ„ํ• ์€ ๊ณ ์ • ๋น„์œจ ฮฑ_iโ‰ฅ0, ฮฃฮฑ_i=1๋กœ ๋‚จ์€ ํญ์„ ๋‚˜๋ˆ„๋ฉด ๋œ๋‹ค.
147
+ ์ตœ์†Œ ํฌ๊ธฐ๋ฅผ ์œ„๋ฐ˜ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋‹ค๋ฅธ ๋ถ€ํ’ˆ์„ ์ค„์ด์ง€ ์•Š๊ณ  ์–ด๋–ค ์กฐ๊ฑด์ด ๋ถ€์กฑํ•œ์ง€ ์•Œ๋ ค์ค€๋‹ค.
148
+
149
+ ์ด๋Ÿฌํ•œ ์กฐ์ž‘์ด ์ƒ์„ฑํ•œ ์‹์ด ์œ ์ผํ•œ ์‹คํ–‰ ์ •๋ณธ์ด๋‹ค.
150
+ ํŽธ์˜ ์กฐ์ž‘์˜ label/provenance๋Š” ์„ค๋ช…์šฉ์ด๋ฉฐ ๋ณ„๋„๋กœ ์žฌ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.
151
+ ๋‹ค์‹œ ํŽธ์ง‘ํ•  ๋•Œ๋Š” ์‹ ๊ตฌ์กฐ fingerprint๊ฐ€ ์ƒ์„ฑ ๋‹น์‹œ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์›๋ž˜ ์กฐ์ž‘ UI๋ฅผ ๋ณต์›ํ•œ๋‹ค.
152
+ ๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ์‹์„ ๋ฐ”๊ฟจ๋‹ค๋ฉด ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์›๋ณธ ์กฐ์ž‘์„ ๋ฌด์กฐ๊ฑด ๋ฎ์–ด์“ฐ์ง€ ์•Š๋Š”๋‹ค.
153
+ ์ด UX๋Š” ๊ตฌํ˜„/์‚ฌ์šฉ์„ฑ ๊ฒ€์ฆ์ด ํ•„์š”ํ•˜๋‹ค. provenance๋งŒ ๋ถ™์ด๋ฉด ์‰ฌ์›Œ์ง„๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
154
+
155
+ '์ด ๋ฉด์— ๋ถ™์ด๊ธฐ'๋Š” ์ „์ฒด rigid placement๋ฅผ ํ•˜๋‚˜์˜ transaction์œผ๋กœ ๊ต์ฒดํ•œ๋‹ค.
156
+ ์ž๊ธฐ ๋ฉด offset์„ ๋นผ์„œ ํ˜•์ƒ์˜ ์›์ ์„ ๊ตฌํ•˜๋˜ ๊ทธ ๋ณด์ •์€ ๊ฐ™์€ ํ˜•์ƒ ์น˜์ˆ˜๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.
157
+ ์ •๋ ฌ์‹๊ณผ position์„ ๋‘ ๊ฐœ์˜ writer๋กœ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
158
+ ๋“œ๋ž˜๊ทธ๋Š” ๊ทธ ์ •์˜์˜ ์กฐ์ • ๊ฐ€๋Šฅํ•œ offset์„ ํŽธ์ง‘ํ•œ๋‹ค. ์˜๋ฏธ๊ฐ€ ๋ถˆ๋ช…ํ™•ํ•˜๋ฉด ์กฐ์šฉํžˆ ๊ด€๊ณ„๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.
159
+
160
+ ## 5. ์šด๋™: ๋ณ„๋„ ๋ฐฐ์น˜ ๋ถ€๋ชจ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค
161
+
162
+ r1์˜ ๋…๋ฆฝ์ ์ธ layout parent์™€ motion parent๋ฅผ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋กœ ๋‘์ง€ ์•Š๋Š”๋‹ค.
163
+ ๋ฐฐ์น˜์˜ ๊ธฐ์ค€ frame์ด ๊ณง ์šด๋™ ์ƒ์† ๊ฒฝ๋กœ๋‹ค. ์—ฌ๊ธฐ์— joint๋งŒ ์ƒ๋Œ€ ๊ฐ•์ฒด ๋ณ€ํ™˜์œผ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.
164
+
165
+ ```text
166
+ W_i(d,q) = W_parent(d,q) ยท T(offset_i(d)) ยท R_i ยท J_i(d,q)
167
+ ```
168
+
169
+ J_i๋Š” i์˜ ์ •์ง€ local ์ขŒํ‘œ์—์„œ ์ž‘์šฉํ•œ๋‹ค.
170
+ slider: T(axis * displacement), hinge: T(pivot) R(axis,angle) T(-pivot).
171
+ q์˜ ์ •์ง€๊ฐ’์€ 0์ด๊ณ  J(d,0)=I. geometry์— scale matrix๋ฅผ ์ค‘๋ณต ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
172
+ feature๋Š” ์†Œ์œ  ํ˜•์ƒ์˜ ์šด๋™์„ ๋”ฐ๋ฅธ๋‹ค. feature ์•„๋ž˜์˜ lamp๋„ ๋”ฐ๋ผ์„œ ์›€์ง์ธ๋‹ค.
173
+
174
+ ๋ฌธํ‹€๊ณผ ํ•จ๊ป˜ ์›€์ง์ด๋Š” lamp๋Š” ๋ฌธํ‹€ feature์—, ๋ฌธ์ง๊ณผ ํ•จ๊ป˜ ์›€์ง์ด๋Š” ์†์žก์ด๋Š” ๋ฌธ์ง feature์— ๋‘”๋‹ค.
175
+ ์น˜์ˆ˜๋Š” ๋ฌธ์ง ํญ์„ ์ฐธ์กฐํ•˜๋ฉด์„œ ์šด๋™์€ ๋ฌธํ‹€์„ ๋”ฐ๋ฅด๋Š” ๊ฒฝ์šฐ์—๋„ ๋‘ ๊ทœ์น™์€ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค:
176
+ ์น˜์ˆ˜ ์ฐธ์กฐ๊ฐ€ ์šด๋™ ๋ถ€๋ชจ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
177
+
178
+ '์›€์ง์ด๋Š” ๋ถ€ํ’ˆ์˜ ์ •์ง€ ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•˜์ง€๋งŒ ์šด๋™์€ ๋”ฐ๋ฅด์ง€ ์•Š์Œ'์„ ๋ณ„๋„์˜ inheritance ์Šค์œ„์น˜๋กœ
179
+ ๋„ฃ์ง€ ์•Š๋Š”๋‹ค. ๊ณ ์ • ๊ธฐ์ค€ frame์—์„œ ์ •์ง€ ์œ„์น˜ ์‹์„ ์ž‘์„ฑํ•œ๋‹ค.
180
+ ์ด ํ‘œํ˜„์ด ์‹ค์ œ ์ž‘์—…์—์„œ ๊ณผ๋„ํ•˜๊ฒŒ ๋ณต์žกํ•œ์ง€ ๊ฒ€์ฆํ•˜๊ณ  ๋‚˜์„œ ํ™•์žฅ์„ ๊ฒฐ์ •ํ•œ๋‹ค.
181
+ world/viewport ๊ณ ์ •์€ ์žฌ์‚ฌ์šฉ Figure ๋‚ด๋ถ€ ๋ฐฐ์น˜์™€ ๊ตฌ๋ณ„ํ•ด scene ๊ณ„์ธต์— ๋‘”๋‹ค.
182
+
183
+ ## 6. ๋™์ผ ์›๋ฆฌ๋กœ ๋‹ค์„ฏ ์‚ฌ๋ก€๋ฅผ ํ‘œํ˜„ํ•˜๋Š”๊ฐ€
184
+
185
+ | ์‚ฌ๋ก€ | ์น˜์ˆ˜ ์ •์˜ | ๋ฐฐ์น˜ ๊ธฐ์ค€ | ์ถ”๊ฐ€ runtime ๋ชจ๋“œ |
186
+ | --- | --- | --- | --- |
187
+ | ๋‹จ๋… ์ƒ์ž | ์ƒ์ˆ˜ ๋˜๋Š” ์ž…๋ ฅ ์น˜์ˆ˜ ์ฐธ์กฐ | Figure ์›์  | ์—†์Œ |
188
+ | ๋ฌธํ‹€+๋‘ ๋ฌธ์ง | opening ๊ณต์œ , ๋ฌธ ํญ=(openingWidthโˆ’2cโˆ’g)/2, ๋‘๊ป˜ ์ƒ์ˆ˜ | ๋ฌธํ‹€ opening frame | ๋‘ slider |
189
+ | ๋žจํ”„ | ์ƒ์ˆ˜ ์น˜์ˆ˜ | ๋ฌธํ‹€ top feature | ์—†์Œ |
190
+ | ๋กค๋Ÿฌ | radius ์ƒ์ˆ˜, length=๋‘ ์ง€์ง€๋ฉด ๊ฑฐ๋ฆฌโˆ’์—ฌ๋ฐฑ | ์ง€์ง€ frame | ํ•„์š” ์‹œ hinge |
191
+ | ์„ ๋ฐ˜ | ํŒ ๋‘๊ป˜ ์ƒ์ˆ˜, ์ธต๊ฐ„ ๋†’์ด๋Š” ๊ณ ์ • ๊ฐœ์ˆ˜์˜ ๋ถ„ํ• ์‹ | ๋™์ผํ•œ ๊ธฐ์ค€ frame | ์—†์Œ |
192
+
193
+ ๋ฌธ์ง์€ q=1์—์„œ ๋‚ด์ธก ๋์ด ๊ฐœ๊ตฌ๋ถ€ ๋์— ๋†“์ด๋„๋ก travel=(openingWidthโˆ’g)/2๋‹ค.
194
+ ํŒ ๋‘๊ป˜/๋žจํ”„ ํฌ๊ธฐ/๋กค๋Ÿฌ ๋ฐ˜์ง€๋ฆ„์€ ๋ถ€๋ชจ์˜ ๋ฐฐ์œจ์ด ์•„๋‹ˆ๋ผ ์ž์‹ ์˜ ์น˜์ˆ˜ ์ •์˜๋กœ ์œ ์ง€๋œ๋‹ค.
195
+ ๋ฌธํ‹€ ํญ ๋ณ€๊ฒฝ์ด ๋ถ€์ฐฉ ์œ„์น˜์— ๋ฐ˜์˜๋˜๋Š” ๊ฒƒ์€ feature๊ฐ€ ๊ฐ™์€ ์น˜์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
196
+
197
+ ๊ฐ ์‚ฌ๋ก€๋ฅผ ํ•˜๋‚˜์˜ ๊ณตํ†ต evaluator๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
198
+ ์‚ฌ๋ก€๋ณ„ ํ•˜๋“œ์ฝ”๋”ฉ ๊ณ„์‚ฐ์„ ๋”ฐ๋กœ ์‹คํ–‰ํ•œ ๊ฒƒ๋งŒ์œผ๋กœ ์ตœ์†Œ ๋ชจ๋ธ์˜ ์ถฉ๋ถ„์„ฑ์„ ์ฃผ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
199
+ ์‹ค์ œ ๋“œ๋ผ์ด๋ฃธ/๋กค ํ”„๋ ˆ์Šค revision์˜ ์ „ํ™˜ ๊ฒ€์ฆ์€ ์•„์ง ์—†๋‹ค.
200
+
201
+ ## 7. ๋‹จ์ˆœ์„ฑ์ด ๋ณด์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒƒ
202
+
203
+ **๊ตฌ์„ฑ์  ์กด์žฌยท์œ ์ผ์„ฑ:** ์œ ํšจ ์ฐธ์กฐ, DAG, ์œ ํšจ provider ์ •์˜์—ญ์ด๋ฉด ์œ„์ƒ ์ˆœ์„œ๋กœ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.
204
+ ๊ฐ ๊ฐ’์— ์ •์˜๊ฐ€ ํ•˜๋‚˜์ด๊ณ  ๊ฐ ํ•จ์ˆ˜๊ฐ€ ๊ฒฐ์ •์ ์ด๋ฏ€๋กœ ๊ฒฐ๊ณผ๋„ ์œ ์ผํ•˜๋‹ค.
205
+ ์ผ๋ฐ˜ ์ œ์•ฝ ๋ฌธ์ œ์˜ ํ•ด๋ฅผ ์ฐพ์•˜๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹ˆ๋‹ค.
206
+
207
+ **๋ฒ”์œ„:** ์ •์ง€ ํšŒ์ „์ด ์ƒ์ˆ˜์ด๊ณ  ๋ชจ๋“  ๊ธธ์ด ์ •์˜๊ฐ€ ์•„ํ•€์ด๋ฏ€๋กœ ์ •์ง€ frame ์œ„์น˜๋„ ์•„ํ•€์ด๋‹ค.
208
+ ์ง์œก๋ฉด์ฒด ์ž…๋ ฅ ๋ฒ”์œ„์—์„œ ์•„ํ•€ ๋ถ€๋“ฑ์‹์˜ ๊ทน๊ฐ’์€ ๊ฐ ๊ณ„์ˆ˜ ๋ถ€ํ˜ธ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
209
+ ๋ถ€๋™์†Œ์ˆ˜ ๊ตฌํ˜„์˜ ๋ณด์ˆ˜์  ์˜ค์ฐจ ๊ฒฝ๊ณ„๊ฐ€ ์—†์œผ๋ฉด ์ธ์ฆ๋œ ์ „ ๋ฒ”์œ„ ์ฆ๋ช…์œผ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.
210
+
211
+ **๊ณต๊ฐ„ ๋ถ€์กฑ:** size<์ตœ์†Œ ์š”๊ตฌ๋ผ๋ฉด ํ˜•์ƒ์„ ์ฐŒ๊ทธ๋Ÿฌ๋œจ๋ฆฌ๊ฑฐ๋‚˜ ๊ด€๊ณ„๋ฅผ ํ’€์ง€ ์•Š๋Š”๋‹ค.
212
+ '๋ฌธ ํญ 80์ด ํ•„์š”ํ•œ๋ฐ ํ˜„์žฌ ํญ์€ 60'์ฒ˜๋Ÿผ ๋ชจ์ž๋ž€ ์น˜์ˆ˜๋ฅผ ๋ณด๊ณ ํ•œ๋‹ค.
213
+ UI๋Š” ์›์ธ ์ž…๋ ฅ์„ ์ˆ˜์ •ํ•˜๋Š” ํ›„๋ณด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ evaluator๊ฐ€ ์„ ํ˜ธ๋„๋ฅผ ์ถ”์ธกํ•˜์ง€ ์•Š๋Š”๋‹ค.
214
+
215
+ **๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒƒ:** ์ž„์˜ 3D packing, ์ถฉ๋Œ ์—†๋Š” ์šด๋™, ๋น„๋ณผ๋ก ๋ฉด ์ ‘์ด‰,
216
+ ์ž๋™ ๋ฏธ์  ๋ฐฐ์น˜, ์ž„์˜ ์—ฐ๋ฆฝ ์ œ์•ฝ, ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ์ž๋™ ๊ฐœ์ˆ˜ ๋ณ€๊ฒฝ.
217
+ ์ด๋“ค์„ ๋ฏธ์ง€์›์œผ๋กœ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœ์„ฑ์˜ ๋Œ€๊ฐ€๋‹ค. ์‚ฌ์šฉ์ž์˜ ํ•ต์‹ฌ ์‚ฌ๋ก€์— ํ•„์ˆ˜๋ผ๋ฉด ๋ฒ”์œ„๋ฅผ ์žฌ๊ฒ€ํ† ํ•œ๋‹ค.
218
+
219
+ ## 8. r1 ๋ฐ˜๋ก€๋ฅผ ์–ด๋–ป๊ฒŒ ์ทจ๊ธ‰ํ•˜๋Š”๊ฐ€
220
+
221
+ 1. auto Grid ๋‹ค์ค‘ span: 3 tracks, ๊ฐ min=10, xโ‚€+xโ‚โ‰ฅ100, xโ‚+xโ‚‚โ‰ฅ100.
222
+ r1 ๊ฒฐ๊ณผ [50,70,30]์€ 150์ด์ง€๋งŒ [10,90,10]์ด๋ฉด 110์ด๋‹ค.
223
+ r2๋Š” ์ด ๋ถ€๋“ฑ์‹ ์ง‘ํ•ฉ์„ ์ž๋™ ๋ฐฐ์น˜ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ํ•ด๊ฒฐํ–ˆ๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
224
+ ๋ช…์‹œ์ ์ธ ์นธ ์น˜์ˆ˜/๋ถ„ํ•  ์˜๋„๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ํ–ฅํ›„ ๋ณ„๋„ ์ œ์•ฝ ๊ธฐ๋Šฅ์˜ ํ•„์š”์„ฑ์„ ๊ฒ€ํ† ํ•œ๋‹ค.
225
+ 2. auto ๋ถ€๋ชจ์˜ ์ž์‹ basis=0/min=100 ๋‘ ๊ฐœ: ๋ถ€๋ชจ๋Š” 0, ์ž์‹์€ ํ•ฉ๊ณ„200.
226
+ r2๋Š” ์ธก์ •๊ณผ ๋ฐฐ๋ถ„์ด๋ผ๋Š” ๋‘ ํฌ๊ธฐ ์ •๋ณธ์„ ๋‘์ง€ ์•Š๋Š”๋‹ค. ๋ถ€๋ชจ ๊ธธ์ด๋ฅผ child1+child2๋กœ
227
+ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ์ž์‹ ์น˜์ˆ˜๋ฅผ ๋ถ€๋ชจ์—์„œ ์ •์˜ํ•œ๋‹ค. ์–‘์ชฝ ๋ฐฉํ–ฅ์„ ๋™์‹œ์— ์“ฐ๋ฉด cycle ์ง„๋‹จ์ด๋‹ค.
228
+ 3. slot size์™€ geometry fixed/stretch writer ์ถฉ๋Œ: slot/fit ์ฒด๊ณ„๋ฅผ ์ œ๊ฑฐํ•ด ์ด ์ถฉ๋Œ์€ ์—†๋‹ค.
229
+ ๋Œ€์‹  width์™€ radius์ฒ˜๋Ÿผ ์˜๋ฏธ์ ์œผ๋กœ ์ค‘๋ณต๋˜๋Š” geometry ์ž…๋ ฅ์„ provider schema์—์„œ ๊ธˆ์ง€ํ•ด์•ผ ํ•œ๋‹ค.
230
+
231
+ ## 9. ์ž์‚ฐยทUXยท์„ฑ๋Šฅ ์ถœํ•˜ ์กฐ๊ฑด
232
+
233
+ - ์‹คํ–‰ ์ •๋ณธ๊ณผ ํŒŒ์ƒ geometry, ๊ฒ€์‚ฌ, 2D/3D๊ฐ€ ๊ฐ™์€ resolved dimensions/frames๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
234
+ - ๊ฐ’ DAG/feature frame์€ ๋ฐ˜๋“œ์‹œ scene node๋กœ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. compile์—์„œ ์ •๋ฆฌํ•œ๋‹ค.
235
+ - compile์€ ์ €์ž‘ ๋ณ€๊ฒฝ, dimension resolve๋Š” ํฌ๊ธฐ ๋ณ€๊ฒฝ, pose๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ ๋•Œ ์ˆ˜ํ–‰ํ•œ๋‹ค.
236
+ - ๋™์ผ ์น˜์ˆ˜/์žฌ์งˆ/์šด๋™์˜ ๋ณ‘ํ•ฉยท๊ณต์œ  ๊ฐ€๋Šฅ์„ฑ์„ ์‹ค์ œ renderer์—์„œ ์ธก์ •ํ•œ๋‹ค.
237
+ - v2โ†’v3 ๋ณ€ํ™˜์€ ์›๋ณธ ๋ณด์กด, id/์™ธ๋ถ€ binding ๋Œ€์‘, ์™ธํ˜• ์ฐจ๋ถ„, ์˜๋„ ์„ ํƒ์„ ํฌํ•จํ•œ๋‹ค.
238
+ - ์ƒˆ Figure๋Š” ๋…๋ฆฝ ์ƒํƒœ์—์„œ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํŒจํ•œ ํ›„๋ณด๋Š” ๊ธฐ์กด ์žฅ๋ฉด์— ๋ง๋ถ™์ด์ง€ ์•Š๋Š”๋‹ค.
239
+ - typed edit๋Š” sourceHash ๊ฒ€์‚ฌ, ์›์ž ์ ์šฉ, undo, ์žฌ์†ก์‹  ๋ฉฑ๋“ฑ์„ฑ์„ ๊ฐ–์ถ˜๋‹ค.
240
+ - ๋ฐœํ–‰ ์ •์ฑ…์€ invalid / assertion violation / unverified / advisory๋ฅผ ๊ตฌ๋ณ„ํ•œ๋‹ค.
241
+ - ์ €์žฅ ์‹คํŒจ์™€ ๊ฒ€์ฆ ๋ฏธ์™„๋ฃŒ๋ฅผ '์‘๋‹ต ์—†์Œ'์œผ๋กœ ์ˆจ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
242
+ - ๊ณ ๊ธ‰ ์‹ ํŽธ์ง‘ ์—†์ด ๋Œ€ํ‘œ ์‚ฌ๋ก€๋ฅผ ๋งŒ๋“ค๊ณ  ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—… ์ˆ˜๋ฅผ ์‹ค์ œ๋กœ ์ธก์ •ํ•œ๋‹ค.
243
+
244
+ ## 10. ๋‹ค์Œ ํŒ์ • ๊ธฐ์ค€
245
+
246
+ ์ด ํ›„๋ณด๋ฅผ ํ™•์ •ํ•  ์กฐ๊ฑด์€ ๊ฐœ๋… ์ˆ˜๊ฐ€ ์ ๋‹ค๋Š” ์‚ฌ์‹ค๋งŒ์ด ์•„๋‹ˆ๋‹ค.
247
+
248
+ 1. ํ•˜๋‚˜์˜ ์น˜์ˆ˜/๋ฐฐ์น˜ evaluator๋กœ ์œ„ ๋‹ค์„ฏ ์‚ฌ๋ก€์™€ ํšŒ์ „ยท์ค‘์ฒฉยท์šด๋™์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
249
+ 2. ๊ธฐ์กด primitive/feature catalog์—์„œ ์ˆ˜์ž‘์—… ์˜ˆ์™ธ๊ฐ€ ์–ผ๋งˆ๋‚˜ ํ•„์š”ํ•œ์ง€ ํ™•์ธํ•œ๋‹ค.
250
+ 3. '๋‹ค๋ฅธ ๋ฉด์— ๋ถ™์ด๊ธฐ', '์ƒ๋‹จ ์œ ์ง€ํ•˜๋ฉฐ ์•„๋ž˜ ๋Œ์ถœ ์ œ๊ฑฐ', 'ํฌ๊ธฐ ๋ณ€๊ฒฝ'์ด ์ผ๊ด€๋œ UI ํŽธ์ง‘์œผ๋กœ ๋œ๋‹ค.
251
+ 4. ๊ธฐ์กด ์ž์‚ฐ์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ˆ˜์‹์„ ์“ฐ๊ฒŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
252
+ 5. ์„ฑ๋Šฅยท๋ฐฐํฌ ํ˜ธํ™˜์„ฑยท์ „์ฒด schema๋Š” ๊ฒ€์ฆ ์ „๊นŒ์ง€ ์™„๋ฃŒ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.
253
+
254
+ ํ˜„์žฌ ์ƒํƒœ: ์ตœ์†Œ ์‹คํ–‰ ๊ณ„์•ฝ ํ›„๋ณด๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ˆ˜์น˜ ์˜ˆ์ œ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋‹จ๊ณ„.
255
+ ์ปจํ…Œ์ด๋„ˆ ๋ฐฉ์‹๋ณด๋‹ค ๋ฐ˜๋“œ์‹œ ์šฐ์›”ํ•˜๋‹ค๋Š” ๊ฒฐ๋ก ์ด๋‚˜ ์‹ค์ œ ์ œํ’ˆ ๋ถˆ๋Ÿ‰์ด ํ•ด๊ฒฐ๋๋‹ค๋Š” ๊ฒฐ๋ก ์€ ๋‚ด๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
@@ -0,0 +1,148 @@
1
+ # V3 ์—ฐ์‚ฐยทํ˜•์ƒ ๊ณ„์•ฝ โ€” ์ฒซ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ subset
2
+
3
+ > ํ˜„์žฌ ๊ตฌํ˜„ยท๊ฒ€์ฆยท์ œํ’ˆ ์—ฐ๊ฒฐ ์ƒํƒœ๋Š” [V3 ํ†ตํ•ฉ ํ˜„ํ™ฉ](v3-status.md)์„ ๋”ฐ๋ฅธ๋‹ค. ๋ณธ๋ฌธ์˜ ๋‹จ๊ณ„๋ณ„ ์—ฐ๊ตฌ/๊ฒ€์ฆ ๊ธฐ๋ก์€ ์ œํ’ˆ ์ „์ฒด ์™„๋ฃŒ ์„ ์–ธ์ด ์•„๋‹ˆ๋‹ค.
4
+
5
+ ํ›„์†: [์ขŒํ‘œ๊ณ„ ํƒ€์ž…๊ณผ ๊ณต๊ฐ„ ์˜์กด ๊ทธ๋ž˜ํ”„ ํ†ตํ•ฉ](v3-spatial-contracts.md).
6
+ ์•„๋ž˜๋Š” ์ตœ์ดˆ scalar ๋‹จ๊ณ„์˜ ๊ธฐ๋ก์ด๋ฉฐ, ํ˜„์žฌ ํ™•์žฅ ๋ฒ”์œ„๋Š” ํ›„์† ๋ฌธ์„œ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.
7
+
8
+ [r3 ํ•ต์‹ฌ ์˜๋ฏธ๋ก ](v3-core-semantics.md)์„ ๊ตฌํ˜„ํ•˜๋Š” ์ฒซ ๋‹จ๊ณ„๋‹ค.
9
+ ์ƒํƒœ: scalar ์ปดํŒŒ์ผ๋Ÿฌ ์‹คํ—˜. ์ •์‹ V3 ์ „์ฒด schema๋‚˜ ์ œํ’ˆ runtime์ด ์•„๋‹ˆ๋‹ค.
10
+ ์‹œ์Šคํ…œ ์„ค๊ณ„ ์ ˆ์ฐจ์— ๋”ฐ๋ผ ์ •์  ์˜ค๋ฅ˜, ์ž…๋ ฅ ์˜์กด ์˜ค๋ฅ˜, ๋ฏธ์ง€์› ๊ธฐ๋Šฅ์„ ๊ตฌ๋ถ„ํ–ˆ๋‹ค.
11
+
12
+ ## 1. ์‹คํ–‰ ๊ตฌ์กฐ
13
+
14
+ `docs/prototypes/v3-typed-plan.mjs`๋Š” `compile(source)`์™€ ๊ทธ ๊ฒฐ๊ณผ์˜ `evaluate(inputs)`๋ฅผ ์ œ๊ณตํ•œ๋‹ค.
15
+ ๊ธฐ์กด ๋ฌด๋‹จ์œ„ `v3-kernel.mjs`์™€ ๋…๋ฆฝ์ด๋‹ค. ์•„์ง ๋‘ ์—”์ง„์„ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์•˜๋‹ค.
16
+
17
+ ```text
18
+ ์ €์ž‘ ์„ ์–ธ โ†’ ๊ตฌ์กฐ/๋‹จ์œ„/์ถœ๋ ฅ ์†Œ์œ ๊ถŒ/์ฐธ์กฐ/cycle ๊ฒ€์‚ฌ โ†’ ๋ถˆ๋ณ€ snapshot ์‹คํ–‰ ๊ณ„ํš
19
+ ์‹ค์ œ ์ž…๋ ฅ โ†’ ๋‹จ์œ„ ์ •๊ทœํ™” โ†’ ์ •์˜์—ญ ๊ฒ€์‚ฌ + ์—ฐ์‚ฐ โ†’ ๊ฐ’๊ณผ geometry descriptor
20
+ ```
21
+
22
+ ๋ฐ˜ํ™˜ geometry๋Š” ์‹ค์ œ mesh๊ฐ€ ์•„๋‹ˆ๋ผ provider/version๊ณผ ํ•ด๊ฒฐ๋œ ์น˜์ˆ˜๋‹ค.
23
+ ์ปดํŒŒ์ผ ํ›„ ์›๋ณธ ์„ ์–ธ์„ ๋ณ€๊ฒฝํ•ด๋„ ์ด์ „ ์‹คํ–‰ ๊ณ„ํš์€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
24
+ ์‹คํŒจํ•œ ํ‰๊ฐ€์—์„œ ๋ถ€๋ถ„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ ํ‰๊ฐ€์— ๊ฐ’์„ ๋‚จ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
25
+
26
+ ## 2. ์„ ์–ธ ๊ตฌ์กฐ
27
+
28
+ ```json
29
+ {
30
+ "version": "r3-scalar-1",
31
+ "inputs": [{"id":"width","unit":"cm","min":1,"max":1000}],
32
+ "constants": [
33
+ {"id":"zero","unit":"mm","value":0},
34
+ {"id":"margin","unit":"mm","value":10}
35
+ ],
36
+ "nodes": [{
37
+ "id":"span",
38
+ "op":"between@1",
39
+ "args":["zero","width","margin","margin"],
40
+ "outputs":{"length":"usableLength","center":"center"}
41
+ }]
42
+ }
43
+ ```
44
+
45
+ ํ•„์ˆ˜ ํ•„๋“œ ๋ˆ„๋ฝ๊ณผ ์•Œ ์ˆ˜ ์—†๋Š” ํ•„๋“œ๋ฅผ ๊ฑฐ์ ˆํ•œ๋‹ค. node id์™€ ๊ฒฐ๊ณผ port id๋Š” ๊ฐ๊ฐ ๊ณ ์œ ํ•˜๋‹ค.
46
+ ์ถœ๋ ฅ ํฌํŠธ๋Š” ์™ธ๋ถ€ ์ž…๋ ฅ/์ƒ์ˆ˜/๋‹ค๋ฅธ ๊ฒฐ๊ณผ ํฌํŠธ์™€ ์ด๋ฆ„์„ ๊ณต์œ ํ•  ์ˆ˜ ์—†๋‹ค.
47
+ JSON Schema ํŒŒ์ผ๊ณผ ๋ฒ”์šฉ ๊ฒ€์ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ์ง์ ‘ ๊ตฌ์กฐ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.
48
+ args ์ˆœ์„œ์™€ output ์ด๋ฆ„์€ ๋ฒ„์ „๋ณ„ ์—ฐ์‚ฐ ๊ณ„์•ฝ์ด๋‹ค. ์ „์ฒด ์—ฐ์‚ฐ catalog ์™„์„ฑ ์ „์˜ ์ œํ•œ๋œ ๊ตฌ์กฐ๋‹ค.
49
+
50
+ ## 3. ๋‹จ์œ„์™€ ์ฐจ์›
51
+
52
+ | ์ž…๋ ฅ ๋‹จ์œ„ | ์‹คํ–‰ ๋‹จ์œ„/๋ฐฐ์œจ |
53
+ | --- | --- |
54
+ | mm, cm, m | mm: 1, 10, 1000 |
55
+ | rad, deg | rad: 1, ฯ€/180 |
56
+ | s | s |
57
+ | ratio, percent | ๋ฌด์ฐจ์›: 1, 0.01 |
58
+
59
+ ์ž…๋ ฅ min/max๋Š” ์„ ์–ธ๋œ ์ž…๋ ฅ ๋‹จ์œ„๋‹ค. ํ‰๊ฐ€ ์‹œ ๊ฐ™์€ ๋‹จ์œ„๋กœ ๋ฒ”์œ„๋ฅผ ํ™•์ธํ•œ ๋’ค ์ •๊ทœํ™”ํ•œ๋‹ค.
60
+ ๊ฒฐ๊ณผ ํฌํŠธ์˜ ํƒ€์ž…์€ `[๊ธธ์ด ์ง€์ˆ˜, ๊ฐ๋„ ์ง€์ˆ˜, ์‹œ๊ฐ„ ์ง€์ˆ˜]`๋กœ ์ถ”๋ก ํ•œ๋‹ค.
61
+ ๊ฐ๋„๋Š” ์ฐจ์› ๊ฒ€์‚ฌ์—์„œ ๋ฌด์ฐจ์› ratio์™€ ๊ตฌ๋ณ„ํ•œ๋‹ค. ๋ฉด์ ์€ `[2,0,0]`์ฒ˜๋Ÿผ ํŒŒ์ƒ๋œ๋‹ค.
62
+
63
+ - add: ๊ฐ™์€ ์ฐจ์›๋ผ๋ฆฌ๋งŒ.
64
+ - mul/div: ์ฐจ์› ์ง€์ˆ˜ ํ•ฉ/์ฐจ.
65
+ - sin: ๊ฐ๋„ ์ž…๋ ฅ๋งŒ, ๊ฒฐ๊ณผ ratio.
66
+ - bare number๋ฅผ ์•”๋ฌต์ ์œผ๋กœ mm๋กœ ํ•ด์„ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ƒ์ˆ˜์—๋„ unit์ด ํ•„์ˆ˜๋‹ค.
67
+
68
+ ์•„์ง ์ •์ˆ˜ ๊ฐœ์ˆ˜ยทboolยทvectorยทpointยทframe ํƒ€์ž…, d/q ๊ตฌ๋ถ„์€ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜๋‹ค.
69
+ ๋”ฐ๋ผ์„œ ํ˜„์žฌ ๊ฒ€์ฆ๊ธฐ๋กœ ๊ณต๊ฐ„ ์ขŒํ‘œ๊ณ„ ํ˜ผ์šฉ์ด๋‚˜ topology์˜ ์ƒํƒœ ์˜์กด๊นŒ์ง€ ์žก์•˜๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
70
+
71
+ ## 4. ์—ฐ์‚ฐ catalog
72
+
73
+ | ์—ฐ์‚ฐ | ์ž…๋ ฅ ์ˆœ์„œ | ์ถœ๋ ฅ | ๊ฐ’ ์˜์กด ์‹คํŒจ |
74
+ | --- | --- | --- | --- |
75
+ | add@1 | a,b (๋™์ผ ์ฐจ์›) | value=a+b | overflow/nonfinite |
76
+ | mul@1 | a,b | value=a*b | overflow/nonfinite |
77
+ | div@1 | a,b | value=a/b | b=0, overflow/nonfinite |
78
+ | sin@1 | angle | value=sin(angle) | nonfinite |
79
+ | between@1 | low,high,marginLow,marginHigh (๊ธธ์ด) | length,center | ์Œ์ˆ˜ ์—ฌ๋ฐฑ, lengthโ‰ค0 |
80
+ | box@1 | width,height,depth (๊ธธ์ด) | xMin,xMax,yMin,yMax,zMin,zMax | ์น˜์ˆ˜โ‰ค0 |
81
+ | cylinder@1 | radius,length (๊ธธ์ด) | start,end,radialMin,radialMax | ์น˜์ˆ˜โ‰ค0 |
82
+
83
+ `between`์€ length์™€ center๋ฅผ ํ•จ๊ป˜ ์†Œ์œ ํ•œ๋‹ค. ๋‹ค๋ฅธ node๊ฐ€ length๋งŒ ๋‹ค์‹œ ์“ฐ๋”๋ผ๋„
84
+ `DUPLICATE_WRITER`๋‹ค. ์ˆœํ™˜์€ node ๊ฒฝ๋กœ์™€ ํ•จ๊ป˜ `CYCLE`๋กœ ๋ณด๊ณ ํ•œ๋‹ค.
85
+
86
+ ```text
87
+ length = high-low-marginLow-marginHigh
88
+ center = (low+high+marginLow-marginHigh)/2
89
+ ```
90
+
91
+ length=0๋„ ๊ฑฐ์ ˆํ•œ๋‹ค. ๋ถ€์กฑ๋Ÿ‰์ด 0์ธ ๊ฒฝ์šฐ์—๋„ 'positive length required'๋ฅผ ๋ช…์‹œํ•œ๋‹ค.
92
+ ์กฐ์šฉํ•œ clamp, ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ๋ฎ์–ด์“ฐ๊ธฐ, ์ดˆ๊ธฐ๊ฐ’์— ์˜์กดํ•œ ๋ฐ˜๋ณต ์ˆ˜๋ ด์€ ์—†๋‹ค.
93
+
94
+ ## 5. provider ๊ณ„์•ฝ
95
+
96
+ ### box@1
97
+
98
+ ์ค‘์‹ฌ ์›์ ์˜ ์ง์œก๋ฉด์ฒด๋‹ค. ์น˜์ˆ˜์™€ ยฑ๋ฐ˜์น˜์ˆ˜ ์ถ• ์ขŒํ‘œ๋ฅผ ๊ฐ™์€ ์ž…๋ ฅ์—์„œ ์ƒ์„ฑํ•œ๋‹ค.
99
+ feature ์ถœ๋ ฅ์€ local ๋ฉด์˜ **์Šค์นผ๋ผ ์ขŒํ‘œ**์ด๋ฉฐ ์™„์ „ํ•œ ์œ ํ–ฅ feature frame์€ ์•„๋‹ˆ๋‹ค.
100
+ round/hollow๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ธฐ์กด rect๋ฅผ ์™ธํ˜• ๊ทธ๋Œ€๋กœ ๋ณ€ํ™˜ํ–ˆ๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
101
+
102
+ ### cylinder@1
103
+
104
+ ์ด subset์€ local Y์ถ• ์‹ค๋ฆฐ๋”๋‹ค. start/end๋Š” โˆ’length/2,+length/2์˜ ์ถ• ์ขŒํ‘œ,
105
+ radialMin/Max๋Š” โˆ’radius,+radius์˜ ๋ฐฉ์‚ฌ extent๋‹ค.
106
+ ๋์  ๋ฒกํ„ฐยท๋ฒ•์„ ยทtangent๋ฅผ ์•„์ง ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. radialMax๋งŒ์œผ๋กœ ์ž„์˜ ํ‘œ๋ฉด ๋ถ€์ฐฉ์ ์ด ๊ฒฐ์ •๋˜์ง€ ์•Š๋Š”๋‹ค.
107
+ ์ตœ์ข… provider์˜ ์ถ• ๊ทœ์•ฝ์€ catalog ํ†ตํ•ฉ ์‹œ ํ™•์ •ํ•ด์•ผ ํ•˜๋ฉฐ ์ด ์‹คํ—˜ ํŽธ์˜๋กœ ๊ณ ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
108
+
109
+ geometry descriptor์™€ feature ์ขŒํ‘œ๊ฐ€ ๊ฐ™์€ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ์ด๋ฏ€๋กœ ๋ณ„๋„์˜ bounds๋กœ ์น˜์ˆ˜๋ฅผ
110
+ ๋‹ค์‹œ ์ถ”์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํ˜„์žฌ mesh์™€ ์ผ์น˜ํ•จ์„ ๊ฒ€์ฆํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค(mesh ๋ฏธ์ƒ์„ฑ).
111
+
112
+ ## 6. ์˜ค๋ฅ˜์˜ ์‹œ์ 
113
+
114
+ ์ปดํŒŒ์ผ: SCHEMA, VERSION, ID, UNIT, TYPE, DUPLICATE_NODE, DUPLICATE_WRITER,
115
+ UNKNOWN_REFERENCE, CYCLE, OPERATOR, RANGE ๋ฐ ์„ ์–ธ ์ˆซ์ž์˜ NON_FINITE.
116
+
117
+ ํ‰๊ฐ€: INPUT_RANGE, DOMAIN(0 ๋‚˜๋ˆ—์…ˆ/์Œ์ˆ˜ ์—ฌ๋ฐฑ), NO_SPACE, GEOMETRY_DOMAIN,
118
+ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ NON_FINITE, ์‹ค์ œ ์ž…๋ ฅ์˜ ๋ˆ„๋ฝ/์ถ”๊ฐ€ ํ•„๋“œ.
119
+
120
+ ๋ชจ๋“  ์˜ค๋ฅ˜๋Š” code/path/detail์„ ๊ฐ€์ง„๋‹ค. ์ด ๋ฉ”์‹œ์ง€๊ฐ€ ๊ทธ๋Œ€๋กœ ์ตœ์ข… ์‚ฌ์šฉ์ž ๋ฌธ๊ตฌ๋ผ๋Š” ๋œป์€ ์•„๋‹ˆ๋‹ค.
121
+ UI์—์„œ๋Š” ์—ฐ์‚ฐ id๋ฅผ ๋ถ€ํ’ˆ/์˜๋„ ์ด๋ฆ„์œผ๋กœ ์—ฐ๊ฒฐํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ž…๋ ฅ์„ ์ œ์‹œํ•ด์•ผ ํ•œ๋‹ค.
122
+ ์—ฌ๋Ÿฌ ์˜ค๋ฅ˜๋ฅผ ํ•œ๊บผ๋ฒˆ์— ๋ชจ์œผ๋Š” ์ง„๋‹จ๊ธฐ์™€ ์ตœ์†Œ ์ถฉ๋Œ ์ง‘ํ•ฉ์€ ๋ฏธ๊ตฌํ˜„์ด๋‹ค.
123
+
124
+ ## 7. ์‹คํ–‰ ์ฆ๊ฑฐ
125
+
126
+ ```sh
127
+ node --test docs/prototypes/v3-typed-plan.test.mjs
128
+ ```
129
+
130
+ 9๊ฐœ ๊ฒ€์‚ฌ ํ†ต๊ณผ:
131
+
132
+ 1. 100๊ฐ€์ง€ ํญ์—์„œ cmโ†’mm, ์–‘๋ ์—ฌ๋ฐฑ, center์™€ cylinder ๋์  ์ผ์น˜.
133
+ 2. ๊ฐ๋„/๊ธธ์ด ํ˜ผ์šฉ์€ compile ์˜ค๋ฅ˜, ๊ณต๊ฐ„ ๋ถ€์กฑ์€ evaluate ์˜ค๋ฅ˜.
134
+ 3. ๊ณฑ์…ˆ/๋‚˜๋ˆ—์…ˆ์˜ ๋ฉด์ ยท๊ธธ์ด ์ถ”๋ก , degโ†’rad ์‚ผ๊ฐํ•จ์ˆ˜.
135
+ 4. ์†Œ๋น„์œจ percentโ†’ratio, ์ง€๋ฆ„ ๋ณ€ํ™”, ์Œ์ˆ˜ ๋ฐ˜์ง€๋ฆ„ ๊ฑฐ์ ˆ.
136
+ 5. ์ค‘๋ณต writer, ์ˆœํ™˜, ์•Œ ์ˆ˜ ์—†๋Š” ์ฐธ์กฐ.
137
+ 6. ์—ฐ์‚ฐ ๋ฒ„์ „๊ณผ ํ•„๋“œ ๋ˆ„๋ฝ/์ถ”๊ฐ€ ๊ฑฐ์ ˆ.
138
+ 7. 0 ๋‚˜๋ˆ—์…ˆ, ์ž…๋ ฅ ๋ˆ„๋ฝยท์ถ”๊ฐ€ยทNaN.
139
+ 8. ์„ ์–ธ ์ˆœ์„œ ๋ณ€๊ฒฝ๊ณผ snapshot ๋ถˆ๋ณ€์„ฑ, ์‹คํŒจ ํ›„ ์žฌํ‰๊ฐ€.
140
+ 9. box ์น˜์ˆ˜์™€ ๋ฉด ์ขŒํ‘œ ์ผ์น˜.
141
+
142
+ ## 8. ๋‹ค์Œ ํ†ตํ•ฉ ์กฐ๊ฑด
143
+
144
+ ํ˜„์žฌ๋Š” scalar ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•ด๋„ frame ๊ณ„์‚ฐ์€ ๋ณ„๋„ ์‹คํ—˜๊ธฐ์— ์žˆ๋‹ค.
145
+ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” **์ขŒํ‘œ๊ณ„๊ฐ€ ํฌํ•จ๋œ feature/connection ํƒ€์ž…**์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•˜๋‚˜์˜ ์˜์กด ๊ทธ๋ž˜ํ”„์—
146
+ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ ํ›„ profile provider์™€ ๋ฐ˜๋ณต cardinality๋ฅผ ํ™•์žฅํ•œ๋‹ค.
147
+ ํ‰๊ฐ€์  ๊ฒ€์‚ฌ๋งŒ ์žˆ์œผ๋ฏ€๋กœ ์ „ ์ž…๋ ฅ ์˜์—ญ์˜ ์•ˆ์ „์„ฑ, floor ๊ฒฝ๊ณ„, ์ˆ˜์น˜ ์˜ค์ฐจ ๋ณด์žฅ์€ ์•„์ง ์—†๋‹ค.
148
+ ๋ถˆ์‹  ์ž…๋ ฅ์— ๋Œ€ํ•œ ๋…ธ๋“œ ์ˆ˜ยท์žฌ๊ท€ ๊นŠ์ดยท์ž์› ์˜ˆ์‚ฐ๋„ ์ œํ’ˆ ์ฑ„ํƒ ์ „์— ํ•„์š”ํ•˜๋‹ค.
@@ -0,0 +1,42 @@
1
+ # ์ ์žฌ๋ฌผ ๋Œ€ ๋ชจ๋ธ ์ „์ฒด ๋ถ€ํ’ˆ ์ถฉ๋Œ ๊ฒ€์‚ฌ โ€” ์‹คํ—˜ v1
2
+
3
+ > ํ˜„์žฌ ๊ตฌํ˜„ยท๊ฒ€์ฆยท์ œํ’ˆ ์—ฐ๊ฒฐ ์ƒํƒœ๋Š” [V3 ํ†ตํ•ฉ ํ˜„ํ™ฉ](v3-status.md)์„ ๋”ฐ๋ฅธ๋‹ค. ๋ณธ๋ฌธ์˜ ๋‹จ๊ณ„๋ณ„ ์—ฐ๊ตฌ/๊ฒ€์ฆ ๊ธฐ๋ก์€ ์ œํ’ˆ ์ „์ฒด ์™„๋ฃŒ ์„ ์–ธ์ด ์•„๋‹ˆ๋‹ค.
4
+
5
+ ## ๋ฒ”์œ„
6
+
7
+ [์‹คํ–‰ ์ฝ”๋“œ](prototypes/v3-payload-collision.mjs)๋Š” ๊ณต๊ฐ„/์ ‘์ด‰ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ์— ๋ณ„๋„ collision ํŒ์ •์„ ๋”ํ•œ๋‹ค. **ํ˜„์žฌ ์ƒํƒœ์˜ payload ๋Œ€ ๋ชจ๋“  ๋ชจ๋ธ ๋ถ€ํ’ˆ**์„ ๊ฒ€์‚ฌํ•œ๋‹ค. ๋ชจ๋ธ ๋ถ€ํ’ˆ ์ƒํ˜ธ ๊ฐ„ ์ถฉ๋Œ, ๋‹ค๋ฅธ ์™ธ๋ถ€ ์ž์‚ฐ, ์›€์ง์ด๋Š” ๊ฒฝ๋กœ ์ „์ฒด์˜ ์—ฐ์† ์ถฉ๋Œ, ๋ฌผ๋ฆฌ ์•ˆ์ •์„ฑ์€ ๋ฒ”์œ„ ๋ฐ–์ด๋‹ค. ๋”ฐ๋ผ์„œ '์ „์—ญ ์ถฉ๋Œ ์™„์„ฑ'์ด๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ์•Š๋Š”๋‹ค.
8
+
9
+ ์ ‘์ด‰ ๋Œ€์ƒ์œผ๋กœ ์„ ์–ธ๋œ ํฌํฌ๋„ ์ถฉ๋Œ ๊ฒ€์‚ฌ์—์„œ ์ œ์™ธํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ฉด ์ ‘์ด‰๊ณผ ๋‚ด๋ถ€ ๊ด€ํ†ต์„ ๊ตฌ๋ถ„ํ•œ๋‹ค. ๊ธฐ์กด geometryยทcapability ์„ ์–ธยท์ œํ’ˆ ์„œ๋ฒ„๋Š” ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค.
10
+
11
+ ## ์ˆ˜ํ•™๊ณผ ๋“ฑ๊ธ‰
12
+
13
+ OBB(ํšŒ์ „ ์ƒ์ž) ๊ฐ„ ์ •์  ๋ถ„๋ฆฌ์ถ• ๊ฒ€์‚ฌ(SAT)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์–‘์ชฝ ์ƒ์ž์˜ ์ถ• 6๊ฐœ์™€ ์ถ• ์‚ฌ์ด ์™ธ์  9๊ฐœ๋ฅผ ๊ฒ€์‚ฌํ•œ๋‹ค. ๊ทผ๊ฑฐ: David Eberly์˜ [Dynamic Collision Detection using Oriented Bounding Boxes](https://www.geometrictools.com/Documentation/DynamicCollisionDetection.pdf)์˜ ์ •์  ์ƒ์ž ๊ฒ€์‚ฌ. ์ด๋ฒˆ ๊ตฌํ˜„์€ ์—ฐ์† ์ถฉ๋Œ ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค.
14
+
15
+ ์ •๊ทœํ™”ํ•œ ํ›„๋ณด ์ถ• L์—์„œ ํˆฌ์˜ ๋ฐ˜๊ฒฝ์€ `ฮฃ halfExtent[i] ร— |axis[i]ยทL|`์ด๋‹ค. ์ค‘์‹ฌ ๊ฑฐ๋ฆฌ์˜ ํˆฌ์˜์ด ๋‘ ๋ฐ˜๊ฒฝ ํ•ฉ๋ณด๋‹ค ํฌ๋ฉด ๋ถ„๋ฆฌ๋œ๋‹ค. ๋ถ„๋ฆฌ์ถ•์ด ์—†์„ ๋•Œ ์ตœ์†Œ ์ถ• ๊ฒน์นจ์ด ํ—ˆ์šฉ ์˜ค์ฐจ ์ด๋‚ด์ด๋ฉด ์ ‘์ด‰, ๊ทธ๋ณด๋‹ค ํฌ๋ฉด ๊ด€ํ†ต์œผ๋กœ ๋ถ„๋ฅ˜ํ•œ๋‹ค. ๋‹จ์ˆœ world AABB ๊ฒน์นจ์„ ์ •๋ฐ€ ์ถฉ๋Œ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค.
16
+
17
+ | ๋ถ€ํ’ˆ ํ˜•์ƒ | ๊ฒฝ๊ณ„๊ฐ€ ๋ถ„๋ฆฌ๋จ | ๊ฒฝ๊ณ„๊ฐ€ ๊ฒน์นจ |
18
+ |---|---|---|
19
+ | box | ๋น„๊ด€ํ†ต | OBB SAT๋กœ ๋ฉด ์ ‘์ด‰/๊ด€ํ†ต ๊ตฌ๋ถ„ |
20
+ | roundedBox, cylinder | ๋ณด์ˆ˜์  ๊ฒฝ๊ณ„ ๋ถ„๋ฆฌ๋กœ ๋น„์ถฉ๋Œ ํ™•์ธ | ์ •๋ฐ€ ํ˜•์ƒ ๊ฒ€์‚ฌ ๋ฏธ๊ตฌํ˜„ โ†’ ๋ฏธ๊ฒ€์ฆ |
21
+ | ๊ทธ ๋ฐ–์˜ provider | ๋ฏธ๊ฒ€์ฆ | ๋ฏธ๊ฒ€์ฆ |
22
+
23
+ ์ „์ฒด ์ƒํƒœ๋Š” ํ™•์ธ๋œ ๊ด€ํ†ต ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด `failed`, ๊ด€ํ†ต์€ ์—†์ง€๋งŒ ๋ฏธ๊ฒ€์ฆ ์Œ์ด ์žˆ์œผ๋ฉด `unverified`, ๋ชจ๋‘ ๋ถ„๋ฆฌ/ํ—ˆ์šฉ ์˜ค์ฐจ ๋‚ด ์ ‘์ด‰์ด๋ฉด `satisfied`๋‹ค. ์ด satisfied๋Š” **ํ˜„์žฌ ์ƒํƒœยท์ง€์ • scope์—์„œ ์œ ์˜๋ฏธํ•œ ๊ด€ํ†ต์„ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค**๋Š” ๋œป์ด๋ฉฐ, ํ•˜์ค‘ยท์•ˆ์ „ยท๋ฐ›์นจ ์ ํ•ฉ์„ฑ ๋ณด์žฅ์ด ์•„๋‹ˆ๋‹ค.
24
+
25
+ ๊ฑฐ๋ฆฌ ํ—ˆ์šฉ ์˜ค์ฐจ๋Š” 1e-6mm๋‹ค. ๊ฑฐ์˜ ํ‰ํ–‰ํ•œ ์ถ•์˜ ์™ธ์  ๊ธธ์ด๊ฐ€ 0๋ณด๋‹ค ํฌ๊ณ  1e-12 ๋ฏธ๋งŒ์ด๋ฉด ์ˆ˜์น˜ ๋ถˆํ™•์‹ค์„ฑ์œผ๋กœ ๋ฏธ๊ฒ€์ฆ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋‹ค๋ฅธ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ถ•์ด ๋ถ„๋ฆฌ๋ฅผ ์ฆ๋ช…ํ•˜๋ฉด ๋ถ„๋ฆฌ ํŒ์ •์€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ถœ๋ ฅ์˜ minimumAxisOverlap์€ ๊ฒ€์‚ฌ ์ถ•์ƒ ์ตœ์†Œ ๊ฒน์นจ์ด๋ฉฐ, ์ „์ฒด ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉํ–ฅ์ด๋‚˜ ๋ฌผ๋ฆฌ ์นจํˆฌ ๊นŠ์ด solver ๊ฒฐ๊ณผ๋ผ๊ณ  ํ•ด์„ํ•˜์ง€ ์•Š๋Š”๋‹ค.
26
+
27
+ ## ๊ฒ€์ฆ
28
+
29
+ [ํ…Œ์ŠคํŠธ](prototypes/v3-payload-collision.test.mjs):
30
+
31
+ - ๋ถ„๋ฆฌ/์ ‘์ด‰/๊ด€ํ†ต/์™„์ „ ํฌํ•จ, ํ—ˆ์šฉ ์˜ค์ฐจ ๊ฒฝ๊ณ„, AABB๊ฐ€ ๊ฒน์น˜์ง€๋งŒ OBB๋Š” ๋ถ„๋ฆฌ๋œ ๊ฒฝ์šฐ.
32
+ - ์ผ๋ฐ˜์ ์ธ 3D ํšŒ์ „์˜ ๊ฒฐ์ •์  ๋‚œ์ˆ˜ **1,000์Œ**์„ ๊ธฐ์กด Three.js OBB ๊ตฌํ˜„๊ณผ ๋Œ€์กฐ: ๊ต์ฐจ174ยท๋ถ„๋ฆฌ826, ์ „๋ถ€ ์ผ์น˜. ๋‘ ๊ตฌํ˜„์€ ๊ฐ™์€ SAT ์›๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ˆ˜ํ•™์  ์ „ ๋ฒ”์œ„ ์ฆ๋ช…์ด ์•„๋‹ˆ๋‹ค.
33
+ - ํฌํฌ ๊ธธ์ด3 ร— ์ƒ์Šน5 ร— ๋‚ด๋ฐˆ3 ร— ์ ์žฌ๋ฌผ yaw5 = **225๊ฐœ ์ƒํƒœ**, ๋ถ€ํ’ˆ ์Œ **4,500๊ฐœ** ๊ฒ€์‚ฌ.
34
+ - ๋†’์ด500mm ์ ์žฌ๋ฌผ์€ ํ•˜๋‹จ ํฌํฌ์™€ ์ ‘์ด‰ํ•˜๋ฉด์„œ ์ƒ๋‹จ ํฌํฌ๋ฅผ ๊ด€ํ†ตํ•œ๋‹ค. ์ ‘์ด‰์€ satisfied, ์ถฉ๋Œ์€ failed๋กœ ๋ถ„๋ฆฌ ํŒ์ •.
35
+ - ๋‘ฅ๊ทผ ๋ณธ์ฒด์˜ ๊ฒฝ๊ณ„ ๋‚ด๋ถ€์— ๋“ค์–ด๊ฐ€๋Š” ์ž‘์€ payload๋Š” ์ž๋™ ํ†ต๊ณผํ•˜์ง€ ์•Š๊ณ  ๋ฏธ๊ฒ€์ฆ.
36
+ - ์ž˜๋ชป๋œ OBBยท์ •๊ทœ์ง๊ต ์œ„๋ฐ˜๊ณผ ๊ฑฐ์˜ ํ‰ํ–‰ํ•œ ์ถ•์˜ ์ˆ˜์น˜ ๋ถˆํ™•์‹ค์„ฑ์„ ๊ฒ€์ฆ.
37
+
38
+ Chrome์—์„œ `--collision` ์‹คํ—˜ ํ™”๋ฉด์œผ๋กœ ์ •์ƒ ๋ฐฐ์น˜ยท์ƒ๋‹จ ํฌํฌ ๊ด€ํ†ตยท๊ณต์ค‘ ๋ถ€์œ ยท๋‘ฅ๊ทผ ๋ณธ์ฒด ๋‚ด๋ถ€ ๋ฐฐ์น˜๋ฅผ ์ง์ ‘ ํ™•์ธํ–ˆ๋‹ค. ์ ‘์ด‰๊ณผ ์ถฉ๋Œ ๊ฒฐ๊ณผ๋ฅผ ๋”ฐ๋กœ ํ‘œ์‹œํ•˜๋ฉฐ ๊ด€ํ†ตํ•œ box ๋ถ€ํ’ˆ์„ ๋ถ‰๊ฒŒ ํ‘œ์‹œํ•œ๋‹ค. ์ž‘์€ ์ ์žฌ๋ฌผ์ด ๋ถˆํˆฌ๋ช… ๋ณธ์ฒด ์•ˆ์— ๊ฐ€๋ ค์ง€๋Š” ์‚ฌ๋ก€๋„ ์žˆ์œผ๋ฏ€๋กœ ์Šคํฌ๋ฆฐ์ƒท๋งŒ์œผ๋กœ ๋น„์ถฉ๋Œ์„ ํŒ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ž„์‹œ ์ด๋ฏธ์ง€: `/private/tmp/figure-v3-full-collision.png`.
39
+
40
+ ## ๋‚จ์€ ๊ตฌํ˜„
41
+
42
+ ๊ณก๋ฉด/์ผ๋ฐ˜ ๋ฉ”์‹œ narrow phase, ๋” ๋„“์€ ๊ทœ๋ชจ์˜ ์ˆ˜์น˜ ์ •์ฑ…, ํŒŒํŠธ ๊ฐ„ ์ž๊ธฐ์ถฉ๋Œ, ์›€์ง์ž„ ๊ฒฝ๋กœ ์ „์ฒด ๊ฒ€์‚ฌ, ์•ˆ์ •์„ฑยท์ ‘์ด‰ ํ—ˆ์šฉ ์ •์ฑ…, ๋ฐ˜๋ณต ๋Œ€์ƒ ์ฐธ์กฐ, ์‹ค์ œ ์ œํ’ˆ UIยทAI ํ†ตํ•ฉ์ด ๋‚จ์•„ ์žˆ๋‹ค. ํ˜„์žฌ ๋ชจ๋“ˆ์€ ์‹คํ—˜ ์–ด๋Œ‘ํ„ฐ์ด๋ฉฐ ์ œํ’ˆ์˜ ๋ฐœํ–‰ ์ฐจ๋‹จ ์กฐ๊ฑด์œผ๋กœ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์•˜๋‹ค.
@@ -0,0 +1,56 @@
1
+ # ์ ์žฌ๋ฌผ ๊ณต๊ฐ„ยทํ‰๋ฉด ์ ‘์ด‰ ๊ฒ€์‚ฌ โ€” ์‹คํ—˜ v1
2
+
3
+ > ํ˜„์žฌ ๊ตฌํ˜„ยท๊ฒ€์ฆยท์ œํ’ˆ ์—ฐ๊ฒฐ ์ƒํƒœ๋Š” [V3 ํ†ตํ•ฉ ํ˜„ํ™ฉ](v3-status.md)์„ ๋”ฐ๋ฅธ๋‹ค. ๋ณธ๋ฌธ์˜ ๋‹จ๊ณ„๋ณ„ ์—ฐ๊ตฌ/๊ฒ€์ฆ ๊ธฐ๋ก์€ ์ œํ’ˆ ์ „์ฒด ์™„๋ฃŒ ์„ ์–ธ์ด ์•„๋‹ˆ๋‹ค.
4
+
5
+ ## ๊ตฌํ˜„ ๋ฒ”์œ„
6
+
7
+ [๊ฒ€์‚ฌ ์ฝ”๋“œ](prototypes/v3-payload-fit.mjs)๋Š” ๊ธฐ์กด capability compiler๋ฅผ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•œ๋‹ค. ์™ธ๋ถ€์—์„œ ์กฐ์ž‘ํ•œ ํ‘œ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„ ์ธ์ฆํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋ฒˆ ๋‹จ๊ณ„์—์„œ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ **์ƒ์ž ์ ์žฌ๋ฌผ ๋ฐ”๋‹ฅ๊ณผ box ๋ถ€ํ’ˆ์˜ top ํ‰๋ฉด**์ด๋‹ค. ์ „์ฒด ๋ฌผ๋ฆฌยท์ถฉ๋Œยท์•ˆ์ „์„ฑ solver๋Š” ์•„๋‹ˆ๋‹ค.
8
+
9
+ ์ž…๋ ฅ์€ binding ID, ๋ฌผ์ฒด ์ข…๋ฅ˜์™€ ์ ์œ  snapshot, ์–‘์˜ ์ƒ์ž ์น˜์ˆ˜(mm), binding ์ขŒํ‘œ๊ณ„ ๊ธฐ์ค€ ์ค‘์‹ฌ(mm), Y์ถ• ํšŒ์ „๊ฐ(deg)์ด๋‹ค. ๊ธฐ์šธ์–ด์ง„ ์ ์žฌ๋ฌผ, ์ž„์˜ ๋ฉ”์‹œ, ๊ณก๋ฉด ๋ฐ›์นจ, ํŒŒ์ง€ ์ ‘์ด‰์€ ์ด ๊ฒ€์‚ฌ ๋ฒ”์œ„ ๋ฐ–์ด๋‹ค. ๋ชจ๋“  ์ถ”๊ฐ€ ํ•„๋“œ์™€ ์ž˜๋ชป๋œ ๊ฐ’์€ ๊ฑฐ๋ถ€ํ•œ๋‹ค.
10
+
11
+ ## ๊ฒ€์‚ฌ ๋ถ„๋ฆฌ
12
+
13
+ ### 1. ๊ณต๊ฐ„ ํฌํ•จ
14
+
15
+ binding์˜ centered-box region์ด ์žˆ์„ ๋•Œ๋งŒ ๊ฒ€์‚ฌํ•œ๋‹ค. ํšŒ์ „๋œ payload์˜ 8๊ฐœ ๊ผญ์ง“์ ์„ region ์ขŒํ‘œ๊ณ„์—์„œ ๊ฒ€์‚ฌํ•œ๋‹ค. ๋ณผ๋กํ•œ ์ƒ์ž์ด๋ฏ€๋กœ ๋ชจ๋“  ๊ผญ์ง“์ ์ด ์ƒ์ž ๋ฐ˜๊ณต๊ฐ„ ์•ˆ์— ์žˆ์œผ๋ฉด ์ „์ฒด ์ƒ์ž๊ฐ€ ํฌํ•จ๋œ๋‹ค. region์ด ์—†์œผ๋ฉด `unverified`์ด๋ฉฐ ๋ฌดํ•œ ๊ณต๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
16
+
17
+ ### 2. ์‹ค์ œ ๋ฐ›์นจ๋ฉด ์ ‘์ด‰
18
+
19
+ ๊ฒ€์ฆ๋œ ํ‘œ๋ฉด ์ถœ์ฒ˜์—์„œ ์‹ค์ œ box ํญยท๊นŠ์ด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. ์ ์žฌ๋ฌผ ๋ฐ”๋‹ฅ์˜ ๋„ค ๊ผญ์ง“์ ์„ ๊ฐ ๋ฐ›์นจ๋ฉด์˜ ๋กœ์ปฌ ์ขŒํ‘œ๊ณ„๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
20
+
21
+ - ๋ฐ”๋‹ฅ๊ณผ ๋ฐ›์นจ๋ฉด์˜ ๋ฒ•์„ ์ด ํ‰ํ–‰ํ•˜๊ณ  ๊ฐ™์€ ์œ„์ชฝ ๋ฐฉํ–ฅ์ธ์ง€ ํ™•์ธํ•œ๋‹ค.
22
+ - ๋ฐ”๋‹ฅ ์‚ฌ๊ฐํ˜•๊ณผ ๋ฐ›์นจ๋ฉด ์‚ฌ๊ฐํ˜•์„ 2D polygon clipping์œผ๋กœ ๊ต์ฐจํ•œ๋‹ค. AABB ์ค‘์ฒฉ๋งŒ์œผ๋กœ ์ ‘์ด‰ ํŒ์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
23
+ - ์–‘์˜ ๊ต์ฐจ ๋ฉด์ ๊ณผ ๋ฐ”๋‹ฅ ํ‰๋ฉด์˜ ๊ฐ„๊ฒฉ์„ ํ•จ๊ป˜ ๊ฒ€์‚ฌํ•œ๋‹ค.
24
+ - ๋ช…์‹œ๋œ ๋ชจ๋“  ์ ‘์ด‰๋ฉด์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ์ „์ฒด contact ์ƒํƒœ๊ฐ€ `satisfied`๋‹ค. ์ด๊ฒƒ์€ ์ด๋ฒˆ '์–‘์ชฝ ํฌํฌ ์ ‘์ด‰' ๊ฒ€์‚ฌ ์ •์ฑ…์ด๋ฉฐ ์ผ๋ฐ˜ ๋‹ค์ค‘ ์ง€์ง€ solver๋ฅผ ๋œปํ•˜์ง€ ์•Š๋Š”๋‹ค.
25
+
26
+ ์ง„๋‹จ์€ `ABOVE_SUPPORT`, `PENETRATES_SUPPORT_PLANE`, `NO_POSITIVE_CONTACT_AREA`, `PLANAR_CONTACT`๋กœ ๋‚˜๋‰œ๋‹ค. ๋ชจ์„œ๋ฆฌยท์  ์ ‘์ด‰์€ ์–‘์˜ ๋ฉด์  ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ง€์›ํ•˜์ง€ ์•Š๋Š” ํ˜•์ƒ/๋ฐฉํ–ฅ์€ `unverified`๋‹ค.
27
+
28
+ ์‹คํ—˜ ์ˆ˜์น˜ ํ—ˆ์šฉ์˜ค์ฐจ๋Š” ๊ฑฐ๋ฆฌ 1e-6mm, ๋ฉด์  1e-6mmยฒ, ๋ฒ•์„  ๋‚ด์  1e-9์ด๋ฉฐ ๊ฒฐ๊ณผ์— ๊ฑฐ๋ฆฌยท๋ฉด์  ์˜ค์ฐจ๋ฅผ ๋ช…์‹œํ•œ๋‹ค. ์ž์‚ฐ ํฌ๊ธฐ ์ œํ•œ์€ payload ์น˜์ˆ˜/์ค‘์‹ฌ ์ ˆ๋Œ“๊ฐ’ 1e6mm, ํšŒ์ „ ยฑ360ยฐ๋‹ค. ์ œํ’ˆ์˜ ๋‹จ์œ„ยท๊ทœ๋ชจ๋ณ„ ์ˆ˜์น˜ ์ •์ฑ…์œผ๋กœ ํ™•์ •ํ•œ ๊ฐ’์ด ์•„๋‹ˆ๋‹ค.
29
+
30
+ ### 3. ์ž๊ฒฉยท์ถฉ๋Œยท์•ˆ์ „์„ฑ
31
+
32
+ ๋ฌผ์ฒด ์ข…๋ฅ˜/์ ์œ  ์กฐ๊ฑด์€ ๊ธฐ์กด eligibility ๊ฒฐ๊ณผ๋กœ ๋ณ„๋„ ์œ ์ง€ํ•œ๋‹ค. ์ ‘์ด‰์ด ์„ฑ๊ณตํ•ด๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฌผ์ฒด์ผ ์ˆ˜ ์žˆ๋‹ค.
33
+
34
+ ์ „์—ญ ์ถฉ๋Œ, ๋ฌด๊ฒŒ์ค‘์‹ฌยทํž˜์— ๋”ฐ๋ฅธ ์•ˆ์ •์„ฑ, ํ•˜์ค‘ยท์šด์˜ ์•ˆ์ „์„ฑ์€ ๊ณ„์† **๋ฏธ๊ฒ€์ฆ**์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋†’์ด500mm ์ ์žฌ๋ฌผ์€ ํ•˜๋‹จ ํฌํฌ์— ์ •ํ™•ํžˆ ๋‹ฟ์œผ๋ฉด์„œ ์ƒ๋‹จ ํฌํฌ์™€ ๊ฒน์น  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ”๋‹ฅ ์ ‘์ด‰ ์„ฑ๊ณต์„ ์ „์ฒด ๋ฐฐ์น˜ ์„ฑ๊ณต์œผ๋กœ ํ•ฉ์น˜๋Š” boolean์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
35
+
36
+ `evaluation.bindings[].checks.spatial`์€ ๊ธฐ์กด ์ผ๋ฐ˜ ํŒ์ •์œผ๋กœ ๋ฏธ๊ฒ€์ฆ์„ ์œ ์ง€ํ•œ๋‹ค. ์ƒˆ ๊ฒ€์‚ฌ๋Š” ๋ฐ˜ํ™˜๊ฐ’ `inspection.containment`์™€ `inspection.contact`์—์„œ ๊ฒ€์‚ฌ ๋ฐฉ๋ฒ•๊ณผ ํ•จ๊ป˜ ๋ช…์‹œ์ ์œผ๋กœ ์ฝ๋Š”๋‹ค. ์ด ๊ฒฐ๊ณผ ๊ตฌ์กฐ๋Š” ์ œํ’ˆ UI ์—ฐ๊ฒฐ ์‹œ ํ†ตํ•ฉํ•  ํ•„์š”๊ฐ€ ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ์„ฑ๊ณต ํ‘œ์‹œ์šฉ ํ†ตํ•ฉ API๊ฐ€ ์•„๋‹ˆ๋‹ค.
37
+
38
+ ## ๊ฒ€์ฆ ๊ฒฐ๊ณผ
39
+
40
+ [ํ…Œ์ŠคํŠธ](prototypes/v3-payload-fit.test.mjs):
41
+
42
+ - ํฌํฌ ๊ธธ์ด3 ร— ์ƒ์Šน3 ร— ๋‚ด๋ฐˆ3 ร— ์ ์žฌ๋ฌผ yaw3 = **81๊ฐœ ์ƒํƒœ**์˜ ์–‘์ชฝ ํฌํฌ ์ ‘์ด‰.
43
+ - ํšŒ์ „0์—์„œ๋Š” ํฌํฌ ํ•˜๋‚˜๋‹น ๊ต์ฐจ ๋ฉด์  `90 ร— forkLength`mmยฒ์™€ ์ผ์น˜.
44
+ - ๊ณต์ค‘ ๋ถ€์œ , ํ‰๋ฉด ๊ด€ํ†ต, ํ•œ์ชฝ ์ง€์ง€ ์ดํƒˆ, ์ •ํ™•ํ•œ ๋ชจ์„œ๋ฆฌ ์ ‘์ด‰, ํฌํฌ ์‚ฌ์ด์— ๋†“์ธ ์ข์€ ๋ฌผ์ฒด๋ฅผ ๊ฑฐ๋ถ€.
45
+ - region ๋‚ด๋ถ€์— ์žˆ์ง€๋งŒ ๋œฌ ๋ฌผ์ฒด, ํšŒ์ „ ํ›„ region ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ„ ๋ฌผ์ฒด๋ฅผ ๊ตฌ๋ณ„.
46
+ - ์กฐ๋ฆฝ ์ „์ฒด๋ฅผ -65/30/90ยฐ ํšŒ์ „ํ•ด๋„ ์ƒ๋Œ€ ์ ‘์ด‰ ๋ฉด์ ์ด ์œ ์ง€๋จ์„ ํ™•์ธ. ์ค‘๋ ฅ ์•ˆ์ •์„ฑ์€ ์ธ์ฆํ•˜์ง€ ์•Š์Œ.
47
+ - ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋†’์€ ๋ฌผ์ฒด์—์„œ๋„ ์ถฉ๋Œ/์•ˆ์ „์„ฑ์€ ๋ฏธ๊ฒ€์ฆ์„ ์œ ์ง€.
48
+ - ์ž…๋ ฅ ์˜ค๋ฅ˜ยท๋ชจ๋ธ ๋ถˆ๋ณ€์„ฑยท์˜ค๋ฅ˜ ํ›„ ์žฌํ‰๊ฐ€ ๊ฒ€์‚ฌ.
49
+
50
+ `node docs/prototypes/render-full-dryroom.mjs --payload`๋กœ ๋„ค ์ƒํƒœ(์ •์ƒ ์ ‘์ด‰ยท150mm ๋ถ€์œ ยท20mm ๊ด€ํ†ตยทํฌํฌ ์‚ฌ์ด)๋ฅผ Chrome์—์„œ ๋ Œ๋”๋งํ•˜๊ณ  ์ง์ ‘ ํ™•์ธํ–ˆ๋‹ค. ์ž„์‹œ ์ด๋ฏธ์ง€: `/private/tmp/figure-v3-full-payload.png`. ์ œํ’ˆ ์„œ๋ฒ„/DB์˜ ์‹ค์ œ ์ž์‚ฐ์„ ํŽธ์ง‘ํ•˜์ง€ ์•Š์•˜๋‹ค.
51
+
52
+ ## ๋‹ค์Œ ๊ฒŒ์ดํŠธ
53
+
54
+ ์ด ์ ‘์ด‰ ๊ฒ€์‚ฌ๊ธฐ๋Š” ์‚ฌ๊ฐ ํ‰๋ฉด๊ณผ ์ƒ์ž๋งŒ ๋Œ€์ƒ์œผ๋กœ ํ•œ๋‹ค. ๋ฐ˜๋ณต ์š”์†Œ์˜ ํ‘œ๋ฉด ์ฐธ์กฐ๋Š” ๋ณ„๋„ ๋ชจ๋“ˆ์—์„œ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๊ณก๋ฉดยทrounded profileยท์ž„์˜ ๋ฉ”์‹œ ๋ฐ ๋ถ€๋ถ„ ์ ‘์ด‰ ์ •์ฑ…, ์ผ๋ฐ˜์ ์ธ ์ „์—ญ ์ถฉ๋Œยท์•ˆ์ •์„ฑ, ์ œํ’ˆ UIยทAIยท์ €์žฅ ํ†ตํ•ฉ์€ ๋‚จ์•„ ์žˆ๋‹ค. ์ด ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ๋งŒ์œผ๋กœ '์ ์žฌ ๊ฐ€๋Šฅ'์ด๋‚˜ '์•ˆ์ „'์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.
55
+
56
+ ํ›„์† ๋‹จ๊ณ„๋กœ [payload ๋Œ€ ๋ชจ๋“  ๋ถ€ํ’ˆ์˜ ์ถฉ๋Œ ๊ฒ€์‚ฌ](v3-payload-collision-validation.md)๋ฅผ ๋ณ„๋„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ์ƒ์ž ์Œ์€ ์ •๋ฐ€ OBB ๊ฒ€์‚ฌ, ๊ณก๋ฉด์€ ๋ณด์ˆ˜์  ๊ฒฝ๊ณ„ ๊ฒ€์‚ฌ ํ›„ ๋ฏธ๊ฒ€์ฆ์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. ๊ธฐ์กด ์ ‘์ด‰ ๊ฒ€์‚ฌ๊ธฐ๋งŒ ํ˜ธ์ถœํ•˜๋ฉด ์ถฉ๋Œ์€ ์—ฌ์ „ํžˆ ๋ฏธ๊ฒ€์ฆ์ด๋‹ค.
@@ -0,0 +1,42 @@
1
+ # ๋ฐ˜๋ณต ์š”์†Œ์˜ ๊ธฐ๋Šฅ/ํ‘œ๋ฉด ์ฐธ์กฐ โ€” ์‹คํ—˜ ๊ฒ€์ฆ
2
+
3
+ > ํ˜„์žฌ ๊ตฌํ˜„ยท๊ฒ€์ฆยท์ œํ’ˆ ์—ฐ๊ฒฐ ์ƒํƒœ๋Š” [V3 ํ†ตํ•ฉ ํ˜„ํ™ฉ](v3-status.md)์„ ๋”ฐ๋ฅธ๋‹ค. ๋ณธ๋ฌธ์˜ ๋‹จ๊ณ„๋ณ„ ์—ฐ๊ตฌ/๊ฒ€์ฆ ๊ธฐ๋ก์€ ์ œํ’ˆ ์ „์ฒด ์™„๋ฃŒ ์„ ์–ธ์ด ์•„๋‹ˆ๋‹ค.
4
+
5
+ ## ์ด๋ฒˆ ๊ตฌํ˜„
6
+
7
+ ์ „์ฒด ์ปจ๋ฒ ์ด์–ด์˜ ๋ฐ˜๋ณต ๋กค๋Ÿฌ๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ทธ ์‹ค์ œ ๋๋ฉด์„ binding pose์™€ contact ํ›„๋ณด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค. ๋ฐ˜๋ณต template๋ฅผ ๋ณ„๋„ ๋ฉ”์‹œ๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์„ ํƒํ•œ ํ•ญ๋ชฉ์„ ํ•œ ๋ฒˆ ๋” ๋ Œ๋”๋งํ•˜์ง€ ์•Š๋Š”๋‹ค.
8
+
9
+ - [์˜ˆ์ œ](prototypes/v3-repeated-binding.mjs)
10
+ - [ํ…Œ์ŠคํŠธ](prototypes/v3-repeated-binding.test.mjs)
11
+ - [capability compiler](prototypes/v3-capability-plan.mjs)
12
+
13
+ ํ˜„์žฌ ์„ ์–ธ ๋ฒ„์ „์€ `r3-capability-3`์ด๋‹ค. pose๋Š” ๊ธฐ์กด transform ์ถœ๋ ฅ ID ๋˜๋Š” `{placement, feature}` ์ค‘ ํ•˜๋‚˜๋‹ค. ํ›„์ž๋Š” ์‹ค์ œ ํ‘œ๋ฉด ์ถœ์ฒ˜ ๊ฒ€์‚ฌ์™€ ๊ฐ™์€ ๊ฒฝ๋กœ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. V1/V2 ์ž…๋ ฅ์€ ๋ฌต์‹œ์ ์œผ๋กœ ๋ฐ”๊พธ์ง€ ์•Š๊ณ  ๊ฑฐ๋ถ€ํ•œ๋‹ค. ์ œํ’ˆ ๋ฐ์ดํ„ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
14
+
15
+ ## ์†Œ์œ ๊ถŒ๊ณผ ์ขŒํ‘œ
16
+
17
+ `select-item@1`์˜ collection โ†’ repeat โ†’ assembly โ†’ template member ๊ฒฝ๋กœ๋ฅผ ์ถ”์ ํ•œ๋‹ค. ์„ ํƒ member๊ฐ€ ๊ทธ assembly์— ์‹ค์ œ ํฌํ•จ๋˜์–ด ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, feature๊ฐ€ ํ•ด๋‹น member์™€ ๋™์ผ shape ์ถœ๋ ฅ์„ ์ฐธ์กฐํ•ด์•ผ ํ•œ๋‹ค.
18
+
19
+ ํ‰๊ฐ€ ์‹œ ์„ ํƒํ•œ occurrence์˜ ์‹ค์ œ pose์™€ local feature๋ฅผ ํ•ฉ์„ฑํ•œ๋‹ค. ๊ฒฐ๊ณผ์˜ `targetGeometryId`์™€ contact์˜ `geometryId`๋Š” ๋ Œ๋”๋ง๋˜๋Š” ๋ฐ˜๋ณต ๋ฉ”์‹œ ID๋‹ค. template ID๋‚˜ select ๋…ธ๋“œ ID๋กœ ๋Œ€์ฒดํ•˜์ง€ ์•Š๋Š”๋‹ค. ์˜ˆ์ œ์˜ ๋กค๋Ÿฌ end๋Š” ์›๊ธฐ๋‘ฅ์˜ ํ‰๋ฉด ๋‹จ๋ฉด์ด์ง€ ์›ํ†ต ๊ณก๋ฉด ์œ„ ๋ฐ›์นจ์ ์ด ์•„๋‹ˆ๋‹ค. role/accepts๋Š” ์ฐธ์กฐ ๊ฒ€์ฆ์šฉ ์˜ˆ์‹œ์ด๋ฉฐ ์‹ค์ œ ์‚ฐ์—… ํŒŒ์ง€ ๋™์ž‘์„ ์ธ์ฆํ•˜์ง€ ์•Š๋Š”๋‹ค.
20
+
21
+ ## ๊ฐœ์ˆ˜ ๋ณ€๊ฒฝ์˜ ์˜๋ฏธ
22
+
23
+ identity๋Š” ํ˜„์žฌ `[repeat node ID, index, member output ID]`๋‹ค. ๊ฐ€์šด๋ฐ ์ •๋ ฌ์—์„œ ๊ฐœ์ˆ˜๊ฐ€ ๋ฐ”๋€Œ๋ฉด ํ•ญ๋ชฉ์˜ ์œ„์น˜๋Š” ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค. ๊ฐ™์€ ID๋Š” **๊ฐ™์€ ์„ ์–ธ ์ˆœ๋ฒˆ**์ด๋ผ๋Š” ๋œป์ด์ง€, ์œ„์น˜๊ฐ€ ๊ณ ์ •๋˜๊ฑฐ๋‚˜ ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ถ€ํ’ˆ์˜ ์ œ์กฐ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™๋‹ค๋Š” ๋œป์ด ์•„๋‹ˆ๋‹ค.
24
+
25
+ - ์„ ํƒ index๋Š” design ์ž…๋ ฅ ๋˜๋Š” ์ƒ์ˆ˜๋กœ ์ •ํ•œ๋‹ค. state ์ž…๋ ฅ์œผ๋กœ ํ”„๋ ˆ์ž„๋งˆ๋‹ค ๋Œ€์ƒ์ด ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ๊ฑฐ๋ถ€ํ•œ๋‹ค.
26
+ - ๊ฐœ์ˆ˜ ๊ฐ์†Œ๋กœ ํ•ด๋‹น index๊ฐ€ ์—†์œผ๋ฉด `TARGET_ABSENT`. ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ํ•ญ๋ชฉยท์ด์ „ ํ”„๋ ˆ์ž„ poseยท๋งˆ์ง€๋ง‰ ํ•ญ๋ชฉ์œผ๋กœ fallbackํ•˜์ง€ ์•Š๋Š”๋‹ค.
27
+ - ์žฌํ™•์žฅํ•˜๋ฉด ๋™์ผ index/member์˜ ID๊ฐ€ ๋ณต๊ตฌ๋œ๋‹ค. ์™ธ๋ถ€ ์ ์œ ๋‚˜ ์ž‘์—…๋ฌผ ํ• ๋‹น๊นŒ์ง€ ์ž๋™ ๋ณต๊ตฌํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹ˆ๋‹ค.
28
+ - repeat/member ์ด๋ฆ„ ๋ณ€๊ฒฝ์€ identity ๋ณ€๊ฒฝ์ด๋‹ค. ์˜์† IDยท๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ •์ฑ…์€ ์ œํ’ˆ ํ†ตํ•ฉ ์ „์— ๋ณ„๋„ ํ™•์ •ํ•ด์•ผ ํ•œ๋‹ค.
29
+
30
+ ## ๊ฒ€์ฆ ๊ฒฐ๊ณผ
31
+
32
+ ์ „์ฒด ์ปจ๋ฒ ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๊ธธ์ด3 ร— ํญ3 ร— ํšŒ์ „4 = **36๊ฐœ ์ƒํƒœ**์—์„œ 14๋ฒˆ์งธ ๋กค๋Ÿฌ ๋๋ฉด๊ณผ ๋ฒ•์„ ์ด ์‹ค์ œ occurrence๋ฅผ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค. geometry ๊ฐœ์ˆ˜๋Š” binding ์ถ”๊ฐ€ ์ „๊ณผ ๊ฐ™๋‹ค.
33
+
34
+ 14๋ฒˆ์งธ ํ•ญ๋ชฉ ์กด์žฌ ๊ฒฝ๊ณ„ `length=2336mm`์—์„œ๋Š” ์„ฑ๊ณตํ•˜๊ณ  `2335.999mm`์—์„œ๋Š” ์‹คํŒจํ•œ๋‹ค. ์ •์ƒ โ†’ ์ถ•์†Œ ์‹คํŒจ โ†’ ์ •์ƒ ๋ณต๊ท€ ํ›„ ๊ฒฐ๊ณผ๊ฐ€ ์ฒ˜์Œ๊ณผ ๊ฐ™๋‹ค. index๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋Œ€์ƒ ID๊ฐ€ ๋ฐ”๋€๋‹ค.
35
+
36
+ ๋‹ค๋ฅธ shape์˜ feature, assembly์— ์—†๋Š” member, state ๊ธฐ๋ฐ˜ index, ์ž˜๋ชป๋œ binding frame์„ ๊ฑฐ๋ถ€ํ•œ๋‹ค. JSON Schema ๊ฒ€์ฆ๊ณผ ์ €์žฅ/์žฌ๋กœ๋“œยท๋…ธ๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝ ์ดํ›„์—๋„ ๋Œ€์ƒ ID์™€ ์‹คํŒจ ๋™์ž‘์„ ์œ ์ง€ํ•œ๋‹ค.
37
+
38
+ ์ด ๋‹จ๊ณ„๋Š” ์ˆ˜์น˜ยท์ฐธ์กฐ ๊ฒ€์ฆ์ด๋‹ค. ์ƒˆ UI๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ € ํŽธ์ง‘ ํ๋ฆ„์„ ์‹œํ—˜ํ•œ ๊ฒƒ์œผ๋กœ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.
39
+
40
+ ## ๋‚จ์€ ๋ฒ”์œ„
41
+
42
+ ์ค‘์ฒฉ repeat, ์ž„์˜ collection ์—ฐ์‚ฐ, occurrence๋ณ„ persistent UUID, ์‚ญ์ œ/์žฌ์ƒ์„ฑ ํ›„ ์™ธ๋ถ€ ์ ์œ  ์ฒ˜๋ฆฌ, UI์˜ ์„ ํƒ ์œ ์ง€/์˜ค๋ฅ˜ ๋ณต๊ตฌ ์•ˆ๋‚ด๋Š” ์•„์ง ์—†๋‹ค. ์ง€์ง€ยทํŒŒ์ง€ ๊ธฐ๋Šฅ์˜ ์‹ค์ œ ๋ฌผ๋ฆฌ ์กฐ๊ฑด์€ ๋ณ„๋„ ๊ฒ€์‚ฌ์ด๋ฉฐ ์ด๋ฒˆ ์ฐธ์กฐ ๊ฒ€์ฆ๋งŒ์œผ๋กœ ์„ฑ๊ณต ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.