Ðак глаÑÐ¸Ñ Ð¾Ð¿Ñеделение, вÑпÑÐºÐ»Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка некоÑоÑого множеÑÑва â ÑÑо наименÑÑее вÑпÑклое множеÑÑво , ÑодеÑжаÑее в Ñебе множеÑÑво . ÐÑпÑклой оболоÑкой конеÑного множеÑÑва попаÑно ÑазлиÑнÑÑ
ÑоÑек ÑвлÑеÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾Ð³Ñанник.
ÐÐ»Ñ ÑеализаÑии одномеÑного ÑлÑÑÐ°Ñ Ð°Ð»Ð³Ð¾ÑиÑма Quickhull годиÑÑÑ ÑÑнкÑÐ¸Ñ std::minmax_element. Ð ÑеÑи можно найÑи множеÑÑво ÑеализаÑий алгоÑиÑма Quickhull Ð´Ð»Ñ Ð¿Ð»Ð¾Ñкого ÑлÑÑаÑ. Ðднако, Ð´Ð»Ñ ÑлÑÑÐ°Ñ Ð¿ÑоизволÑной ÑазмеÑноÑÑи ÑÑ Ð¾Ð´Ñ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð»Ð¸ÑÑ Ð¾Ð´Ð½Ð° ÑÑжÑловеÑÐ½Ð°Ñ ÑеализаÑÐ¸Ñ Ñ ÑайÑа qhull.org.
Ð ÑÐºÐ¾Ð±ÐºÐ°Ñ ÑÑдом Ñ ÑеÑминами Ñ Ð±ÑÐ´Ñ Ð´Ð°Ð²Ð°ÑÑ Ð¿ÐµÑевод на английÑкий (в ÑÑиле ТÑÒбо, Ñж извиниÑе). ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ ÑÐµÑ , кÑо еÑÑ Ð½Ðµ знаком Ñ ÑеÑминами и бÑÐ´ÐµÑ ÑиÑаÑÑ Ð°Ð½Ð³Ð»Ð¾ÑзÑÑнÑе ÑекÑÑÑ Ð¿Ð¾ ÑÑÑлкам, либо ÑеÑÐ¸Ñ ÑазобÑаÑÑÑÑ Ñ ÑекÑÑами иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кода.
УпомÑнÑÑÐ°Ñ Ð²ÑÑе «канониÑеÑкаÑ» ÑеализаÑÐ¸Ñ Ð½Ð°Ð¿Ð¸Ñана на C (еÑÑÑ C++ биндинги), иÑполÑзÑеÑÑÑ Ð´Ð°Ð²Ð½Ð¾ и ÑиÑоко (в ÑоÑÑаве пакеÑов GNU Octave и MATLAB) и, ÑледоваÑелÑно, Ñ Ð¾ÑоÑо пÑовеÑена. Ðо еÑли Ð²Ñ ÑеÑиÑе изолиÑоваÑÑ ÐºÐ¾Ð´, оÑноÑÑÑийÑÑ ÑолÑко лиÑÑ Ðº Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð°Ð»Ð³Ð¾ÑиÑÐ¼Ñ Quickhull, Ñо ÑÑолкнÑÑеÑÑ Ñо ÑложноÑÑÑми. ÐÐ»Ñ Ð¿ÑоÑÑейÑÐ¸Ñ Ð¿Ñименений Ñ Ð¾ÑелоÑÑ Ð±Ñ Ð¸Ð¼ÐµÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾Ð±Ñ Ð¾Ð´Ð¸ÑÑÑ Ñем-Ñо более компакÑнÑм. Ðемного поÑÑаÑавÑиÑÑ, Ñ Ð½Ð°Ð¿Ð¸Ñал ÑÐ²Ð¾Ñ ÑеализаÑÐ¸Ñ (https://github.com/tomilov/quickhull): ÑÑо единÑÑвеннÑй клаÑÑ, без завиÑимоÑÑей. ÐÑего поÑÑдка 750 ÑÑÑок.
ÐаÑÐ¸Ð½Ð°Ñ ÑабоÑаÑÑ Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¼ÐµÑнÑми ÑÑÑноÑÑÑми, понимаеÑÑ, ÑÑо ÑпÑÐ°Ð²ÐµÐ´Ð»Ð¸Ð²Ñ ÐºÐ°ÐºÐ¸Ðµ-Ñо аналогии Ñ Ð¿ÑивÑÑнÑми двÑÑ Ð¼ÐµÑнÑми и ÑÑÑÑ Ð¼ÐµÑнÑми обÑекÑами. ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ неÑколÑко ÑпоÑÑдоÑиÑÑ Ð·Ð½Ð°Ð½Ð¸Ñ: ввеÑÑи некоÑоÑÑе новÑе ÑеÑÐ¼Ð¸Ð½Ñ Ð¸ пÑоÑÑниÑÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸.
ÐÐ»Ñ Ð¿ÑогÑаммиÑÑа геомеÑÑиÑеÑкие обÑекÑÑ â ÑÑо пÑежде вÑего ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ . ÐÐ»Ñ Ð½Ð°Ñала Ñ Ð´Ð°Ð¼ геомеÑÑиÑеÑкие опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ (не оÑÐµÐ½Ñ ÑÑÑогие). ÐалÑÑе по ÑекÑÑÑ Ð±ÑдÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑооÑвеÑÑÑвеннÑÑ ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑдобнÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ñ ÑаниÑÑ Ð´Ð°Ð½Ð½Ñе и опеÑиÑоваÑÑ Ñ Ð½Ð¸Ð¼Ð¸ доÑÑаÑоÑно ÑÑÑекÑивно.
ÐбознаÑим ÑазмеÑноÑÑÑ Ð¿ÑоÑÑÑанÑÑва как .
ÐÑÐ°Ð½Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð³Ñанника, ÐµÑ Ð³ÑаниÑÑ, гÑаниÑÑ ÐµÑ Ð³ÑÐ°Ð½Ð¸Ñ Ð¸ Ñ.д. на английÑком именÑÑÑÑÑ face. Ðам ÑÑÑÐ»ÐºÑ Ð½Ð° Ñ Ð¾ÑоÑий ÑеÑÑÑÑ, где логиÑеÑки обоÑновÑваеÑÑÑ, ÑÑо в -меÑном пÑоÑÑÑанÑÑве видимÑми или наблÑдаемÑми обÑекÑами могÑÑ ÑвлÑÑÑÑÑ ÑолÑко лиÑÑ -меÑнÑе обÑекÑÑ, Ñо еÑÑÑ Ð³ÑаниÑÑ (англ. boundaries) -меÑнÑÑ Ð¾Ð±ÑекÑов. ÐнглийÑкий ÑеÑмин facet â ÑÑо именно наблÑÐ´Ð°ÐµÐ¼Ð°Ñ Ð³ÑанÑ. ÐÑÑÐ¼Ð°Ñ (англ. straight line) â ÑÑо вÑегда одномеÑÐ½Ð°Ñ ÑÑÑноÑÑÑ. ТоÑÐºÑ (веÑÑинÑ) можно в ÑÑой гÑадаÑии ÑÑиÑаÑÑ Ð½ÑлÑ-меÑной.
ÐÐ¼ÐµÑ Ð´ÐµÐ»Ð¾ Ñ Ð½ÐµÐºÐ¾ÑоÑÑм набоÑом из ÑоÑек, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ пеÑейÑи к ÑаÑÑмоÑÑÐµÐ½Ð¸Ñ ÑооÑвеÑÑÑвенного набоÑа из векÑоÑов, вÑÑÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð· ÑоÑек из вÑÐµÑ Ð´ÑÑÐ³Ð¸Ñ . Таким обÑазом Ð¼Ñ ÐºÐ°Ðº Ð±Ñ Ð½Ð°Ð·Ð½Ð°Ñим ÑÑÑ ÑоÑÐºÑ Ð½Ð°Ñалом кооÑÐ´Ð¸Ð½Ð°Ñ (англ. origin). ÐÑли вÑе ÑоÑки лежали в одной плоÑкоÑÑи, Ñо плоÑкоÑÑÑ ÑмеÑаеÑÑÑ Ñаким обÑазом, ÑÑо наÑÐ¸Ð½Ð°ÐµÑ Ð¿ÑÐ¾Ñ Ð¾Ð´Ð¸ÑÑ ÑеÑез наÑало кооÑдинаÑ. ÐÑÑÐ¸Ð½Ð½Ð°Ñ Ð½ÐµÐ·Ð°Ð²Ð¸ÑимоÑÑÑ ÑоÑек вÑполнÑеÑÑÑ, когда вÑполнÑеÑÑÑ Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð½ÐµÐ·Ð°Ð²Ð¸ÑимоÑÑÑ -го ÑооÑвеÑÑÑвенного векÑоÑа. ÐпÑеделение линейной незавиÑимоÑÑи векÑоÑов вам ÑкоÑей вÑего Ñже знакомо. Таким обÑазом в -меÑном пÑоÑÑÑанÑÑве нелÑÐ·Ñ Ð²ÑбÑаÑÑ Ð±Ð¾Ð»ÑÑе ÑоÑки Ñак, ÑÑÐ¾Ð±Ñ Ð²Ñе они бÑли аÑÑинно незавиÑимÑ. ÐоÑÑÐ½Ñ ÑÑо: в ÑÑÑÑ Ð¼ÐµÑном пÑоÑÑÑанÑÑве ÑÑеÑголÑник (гÑÐ°Ð½Ñ ÑÑÑÑ Ð¼ÐµÑного ÑимплекÑа â ÑеÑÑаÑдÑа) задан ÑÑÐµÐ¼Ñ ÑоÑками (не лежаÑими на одной пÑÑмой, конеÑно); ÑеÑез ÑÑи ÑÑи ÑоÑки пÑÐ¾Ñ Ð¾Ð´Ð¸Ñ ÐµÐ´Ð¸Ð½ÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð¿Ð»Ð¾ÑкоÑÑÑ; лÑÐ±Ð°Ñ ÑоÑка ÑÑой плоÑкоÑÑи, Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÐºÐ¾ множеÑÑÐ²Ñ Ð¸Ð· ÑÑÑÑ Ð²ÐµÑÑин ÑÑеÑголÑника пÑевÑаÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½ÐµÑÑво ÑÑÑÑ Ð°ÑÑинно незавиÑимÑÑ ÑоÑек в множеÑÑво 4 аÑÑинно завиÑимÑÑ . ÐÐ½Ð°Ð»Ð¾Ð³Ð¸Ñ ÑпÑаведлива Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ ÑазмеÑноÑÑей.
ÐÑоме вÑего пÑоÑего Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ввеÑÑи понÑÑие гипеÑобÑÑма (англ. hypervolume).
Сам алгоÑиÑм Quickhull Ð´Ð»Ñ ÑлÑÑÐ°Ñ Ð¿ÑоизволÑной ÑазмеÑноÑÑи бÑл пÑедложен в ÑÑÑде Barber, C. Bradford; Dobkin, David P.; Huhdanpaa, Hannu (1 December 1996). «The quickhull algorithm for convex hulls». ACM Transactions on Mathematical Software 22 (4): 469â483. «ÐанониÑеÑкаÑ» ÑеализаÑÐ¸Ñ Ð½Ð° C Ð¾Ñ Ð°Ð²ÑоÑов ÑаÑполагаеÑÑÑ Ð½Ð° Ñже ÑпомÑнÑÑом ÑайÑе http://qhull.org/, ÑепозиÑоÑий Ñ C++ инÑеÑÑейÑом https://gitorious.org/qhull/qhull. ÐÑоÑиÑиÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑм из пеÑвоиÑÑоÑника:
ÐÑпÑÐºÐ»Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка пÑедÑÑавлÑÐµÑ Ñобой ÑпиÑок гÑаней.
Ðак видно, Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð½Ð°ÑаÑÑ Ñ Ð½ÐµÐºÐ¾ÑоÑого ÑÑаÑÑового ÑимплекÑа. ÐÐ»Ñ ÑÑого можно вÑбÑаÑÑ Ð»ÑбÑе аÑÑинно незавиÑимÑе ÑоÑки, но лÑÑÑе иÑполÑзоваÑÑ ÐºÐ°ÐºÑÑ-нибÑÐ´Ñ Ð´ÐµÑÑвÑÑ ÑвÑиÑÑикÑ. ÐÑновное ÑÑебование на ÑÑом Ñаге â ÑÑÐ¾Ð±Ñ Ð½Ð°Ñ ÑÐ¸Ð¼Ð¿Ð»ÐµÐºÑ Ð¿Ð¾ возможноÑÑи не полÑÑилÑÑ Â«Ñзким» (англ. narrow). ÐÑо важно в ÑлÑÑае, еÑли иÑполÑзÑеÑÑÑ Ð°ÑиÑмеÑика Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой (англ. floating-point arithmetic). РоÑигиналÑной ÑеализаÑии иÑполÑзÑÑÑÑÑ ÑоÑки Ñ Ð¼Ð°ÐºÑималÑнÑми и минималÑнÑми знаÑениÑми кооÑÐ´Ð¸Ð½Ð°Ñ (оÑевидно, они же войдÑÑ Ð²Ð¾ множеÑÑво веÑÑин вÑпÑклой оболоÑки). ÐаÑав Ñо ÑÑаÑÑового ÑимплекÑа, на каждом поÑледÑÑÑем Ñаге Ð¼Ñ Ð±Ñдем полÑÑаÑÑ Ð²ÑÑ Ð±Ð¾Ð»ÑÑий и болÑÑий многогÑанник, неизменнÑм ÑвойÑÑвом коÑоÑого вÑегда бÑÐ´ÐµÑ ÐµÐ³Ð¾ вÑпÑклоÑÑÑ. Я бÑÐ´Ñ Ð½Ð°Ð·ÑваÑÑ ÐµÐ³Ð¾ вÑеменнÑй многогÑанник.
Ðалее Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑаÑпÑеделиÑÑ Ð¾ÑÑавÑиеÑÑ ÑоÑки в Ñак назÑваемÑе ÑпиÑки внеÑÐ½Ð¸Ñ ÑоÑек (англ. outside sets) гÑаней â ÑÑо Ñакие ÑпиÑки ÑоÑек, коÑоÑÑе ведÑÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ гÑани и в коÑоÑÑе попадаÑÑ ÐµÑÑ Ð½Ðµ ÑаÑÑмоÑÑеннÑе (далее â неназнаÑеннÑе, англ. unassigned) ÑоÑки, Ð½Ð°Ñ Ð¾Ð´ÑÑиеÑÑ Ð¾ÑноÑиÑелÑно плоÑкоÑÑи гÑани по дÑÑгÑÑ ÑÑоÑонÑ, нежели внÑÑÑенноÑÑÑ ÑимплекÑа (или вÑеменного многогÑанника в далÑнейÑем). ÐдеÑÑ Ð¼Ñ Ð¿Ð¾Ð»ÑзÑемÑÑ Ñем ÑвойÑÑвом вÑпÑклого многогÑанника (и ÑимплекÑа в ÑаÑÑноÑÑи), ÑÑо веÑÑ Ð¾Ð½ Ð»ÐµÐ¶Ð¸Ñ Ñеликом ÑолÑко в одном из двÑÑ Ð¿Ð¾Ð»ÑпÑоÑÑÑанÑÑв, полÑÑаемÑÑ Ð¿Ñи Ñазбиении вÑего пÑоÑÑÑанÑÑва плоÑкоÑÑÑÑ Ð»Ñбой гÑани. Ðз ÑÑого ÑвойÑÑва ÑледÑÐµÑ ÑÐ¾Ñ ÑакÑ, ÑÑо еÑли ÑоÑка не попала ни в один из ÑпиÑков внеÑÐ½Ð¸Ñ ÑоÑек гÑаней вÑпÑклой оболоÑки, Ñо она доÑÑовеÑно Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð²Ð½ÑÑÑи ÑÑой вÑпÑклой оболоÑки. РдалÑнейÑем в алгоÑиÑме понадобиÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñом, ÐºÐ°ÐºÐ°Ñ Ð¸Ð· ÑоÑек, ÑодеÑжаÑÐ¸Ñ ÑÑ Ð² ÑпиÑке внеÑÐ½Ð¸Ñ ÑоÑек, наиболее Ñдалена Ð¾Ñ Ð¿Ð»Ð¾ÑкоÑÑи гÑани, поÑÑомÑ, добавлÑÑ ÑоÑки в ÑпиÑок внеÑÐ½Ð¸Ñ ÑоÑек, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑÐ¾Ñ ÑанÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñом, коÑоÑÐ°Ñ Ð¸Ð· Ð½Ð¸Ñ ÑÐ°Ð¼Ð°Ñ Ð´Ð°Ð»ÑнÑÑ. ÐÑÐ±Ð°Ñ ÑоÑка Ð¿Ð¾Ð¿Ð°Ð´Ð°ÐµÑ ÑолÑко в один ÑпиÑок внеÑÐ½Ð¸Ñ ÑоÑек. Ðа аÑимпÑоÑиÑеÑкÑÑ ÑложноÑÑÑ Ð½Ðµ влиÑÐµÑ Ñо как именно ÑаÑпÑеделÑÑÑÑÑ ÑоÑки по ÑпиÑкам.
Ðа данном ÑÑапе мне Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑделаÑÑ Ð¾ÑÑÑÑпление и ÑаÑÑказаÑÑ Ð¾ Ñом, как задаÑÑ Ð³ÑанÑ, как вÑÑиÑлÑÑÑ ÑаÑÑÑоÑние до неÑ, как опÑеделиÑÑ Ð¾ÑиенÑаÑÐ¸Ñ ÑоÑки оÑноÑиÑелÑно гÑани.
ТепеÑÑ Ð¾Ð¿Ð¸ÑÑваÑÑ Ð¿Ð»Ð¾ÑкоÑÑÑ Ð³Ñани Ð¼Ñ Ñмеем, но оÑÑалаÑÑ Ð¾Ð´Ð½Ð° неÑÑноÑÑÑ: как же вÑбÑаÑÑ Ð¿Ð¾ÑÑдок пеÑеÑиÑÐ»ÐµÐ½Ð¸Ñ ÑоÑек в ÑпиÑÐºÐ°Ñ Ð²ÐµÑÑин гÑаней ÑÑаÑÑового ÑимплекÑа? ÐвÑоÑÑ Ð½Ðµ Ñ ÑанÑÑ ÑпиÑок веÑÑин ÑпоÑÑдоÑеннÑм. Ðни поÑÑÑпаÑÑ Ð¸Ð½Ð°Ñе. Ðадав ÑÑавнение плоÑкоÑÑи Ð´Ð»Ñ Ð¿ÑоизволÑного, но ÑикÑиÑованного поÑÑдка веÑÑин, они вÑÑÑнÑÑÑ Ð¾ÑиенÑаÑÐ¸Ñ ÐºÐ°ÐºÐ¾Ð¹-либо внÑÑÑенней ÑоÑки (англ. inner point) оÑноÑиÑелÑно ÑÑой плоÑкоÑÑи. То еÑÑÑ Ð²ÑÑиÑлÑÑÑ Ð¾ÑиенÑиÑованное ÑаÑÑÑоÑние. Ð ÑлÑÑае, еÑли ÑаÑÑÑоÑние оÑÑиÑаÑелÑное они менÑÑÑ Ð·Ð½Ð°Ðº Ñ ÐºÐ¾Ð¾ÑÐ´Ð¸Ð½Ð°Ñ Ð½Ð¾Ñмали к гипеÑплоÑкоÑÑи и Ñ ÐµÑ ÑмеÑÐµÐ½Ð¸Ñ Ð¾Ñ Ð½Ð°Ñала кооÑдинаÑ. Ðибо задаÑÑ Ð·Ð½Ð°Ñение Ñлага, ÑигнализиÑÑÑÑее о Ñом, ÑÑо гÑÐ°Ð½Ñ Ð¿ÐµÑевÑÑнÑÑа (англ. flipped). ÐнÑÑÑенней ÑоÑкой Ð´Ð»Ñ Ð²ÑпÑклого многогÑанника бÑÐ´ÐµÑ ÑÑеднее аÑиÑмеÑиÑеÑкое Ñ Ð¾ÑÑ Ð±Ñ ÐµÐ³Ð¾ веÑÑин (Ñ.н. ÑенÑÑ Ð¼Ð°ÑÑ, еÑли взÑÑÑ Ð²Ñе веÑÑинÑ).
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ гÑани, кÑоме Ð·Ð°Ð´Ð°Ð½Ð¸Ñ ÑпиÑка веÑÑин и ÑпиÑка внеÑÐ½Ð¸Ñ ÑоÑек, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ задаÑÑ ÑпиÑок ÑоÑÐµÐ´Ð½Ð¸Ñ (англ. adjacency list) гÑаней. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ гÑани он бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ñовно ÑлеменÑов. Так как ÑÑаÑÑовÑй ÑÐ¸Ð¼Ð¿Ð»ÐµÐºÑ ÑодеÑÐ¶Ð¸Ñ Ð³ÑанÑ, Ñо оÑевидно, ÑÑо Ð´Ð»Ñ Ð»Ñбой его гÑани в ÑпиÑок ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней попадÑÑ Ð²Ñе оÑÑалÑнÑе гÑани ( ÑÑÑк).
ТепеÑÑ ÐµÑÑÑ Ð²ÑеменнÑй многоÑголÑник Ñ ÐºÐ¾ÑоÑÑм можно ÑабоÑаÑÑ Ð² главном Ñикле. Рглавном Ñикле ÑÑÐ¾Ñ Ð²ÑеменнÑй многоÑголÑник доÑÑÑаиваеÑÑÑ, Â«Ð·Ð°Ñ Ð²Ð°ÑÑваÑ» вÑÑ Ð±Ð¾Ð»ÑÑе и болÑÑе пÑоÑÑÑанÑÑва, а вмеÑÑе Ñ Ð½Ð¸Ð¼ и ÑоÑки иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ множеÑÑва, пока не наÑÑÐ°Ð½ÐµÑ Ñакой моменÑ, когда вне многогÑанника не оÑÑанеÑÑÑ Ð½Ð¸ одной ÑоÑки. Ðалее опиÑÑ ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ Ð±Ð¾Ð»ÐµÐµ подÑобно. Рименно Ñо, как он ÑÑÑÑоен в моей ÑеализаÑии.
ÐлавнÑй Ñикл â ÑÑо Ñикл по гÑанÑм. Ðа каждой иÑеÑаÑии ÑÑеди гÑаней Ñ Ð½ÐµÐ¿ÑÑÑÑми ÑпиÑками внеÑÐ½Ð¸Ñ ÑоÑек вÑбиÑаеÑÑÑ ÑÐ°Ð¼Ð°Ñ Ð»ÑÑÑÐ°Ñ Ð³ÑÐ°Ð½Ñ (англ. best facet); лÑÑÑÐ°Ñ Ð² Ñом ÑмÑÑле, ÑÑо ÑÐ°Ð¼Ð°Ñ Ð´Ð°Ð»ÑнÑÑ ÑоÑка из ÑпиÑка внеÑÐ½Ð¸Ñ ÑоÑек Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð´Ð°Ð»ÑÑе Ð¾Ñ Ð³Ñани, Ñем Ñ Ð´ÑÑÐ³Ð¸Ñ Ð³Ñаней. Цикл завеÑÑаеÑÑÑ, когда гÑаней Ñ Ð½ÐµÐ¿ÑÑÑÑми ÑпиÑками внеÑÐ½Ð¸Ñ ÑоÑек не оÑÑалоÑÑ.
Ð Ñеле главного Ñикла вÑбÑÐ°Ð½Ð½Ð°Ñ Ð³ÑÐ°Ð½Ñ ÑдалÑеÑÑÑ ÐºÐ°Ðº заведомо не ÑвлÑÑÑаÑÑÑ Ð³ÑанÑÑ Ð²ÑпÑклой оболоÑки. Ðо пÑедваÑиÑелÑно она «ÑазбиÑаеÑÑÑ Ð½Ð° ÑоÑÑавлÑÑÑие». Ðз ÑпиÑка внеÑÐ½Ð¸Ñ ÑоÑек извлекаеÑÑÑ ÑÐ°Ð¼Ð°Ñ Ð´Ð°Ð»ÑнÑÑ ÑоÑка (англ. furthest point) â она навеÑнÑка ÑвлÑеÑÑÑ Ð²ÐµÑÑиной вÑпÑклой оболоÑки. ÐÑÑалÑнÑе ÑоÑки пеÑемеÑаÑÑÑÑ Ð² оÑделÑнÑй вÑеменнÑй ÑпиÑок неназнаÑеннÑÑ ÑоÑек . Ðалее по ÑпиÑкам ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней, наÑÐ¸Ð½Ð°Ñ Ñо ÑпиÑка гÑани , Ð¾Ð±Ñ Ð¾Ð´Ð¸ÑÑÑ Ð³ÑÐ°Ñ ÑмежноÑÑи гÑаней вÑеменного многогÑанника и ÐºÐ°Ð¶Ð´Ð°Ñ Ð³ÑÐ°Ð½Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑÑÑ Ð² ÑпиÑок Ñже поÑеÑÑннÑÑ (англ. visited) гÑаней и ÑеÑÑиÑÑеÑÑÑ Ð½Ð° видимоÑÑÑ (англ. visibility) из ÑоÑки . ÐÑли гÑÐ°Ð½Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ð°Ñ Ð¸Ð· ÑоÑки , Ñо ÐµÑ ÑоÑедние гÑани далее не Ð¾Ð±Ñ Ð¾Ð´ÑÑÑÑ, инаÑе Ð¾Ð±Ñ Ð¾Ð´ÑÑÑÑ. ÐÑли Ñ Ð¾ÑеÑедной видимой гÑани ÑÑеди ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней еÑÑÑ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñе из ÑоÑки , Ñо она Ð¿Ð¾Ð¿Ð°Ð´Ð°ÐµÑ Ð² ÑпиÑок гÑаниÑнÑÑ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ Ð³Ñаней (англ. before-the-horizon как пÑоÑивоположноÑÑÑ over-the-horizon â «загоÑизонÑнÑй»). Ðо еÑли вÑе ÑоÑедние гÑани ÑвлÑÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñми, Ñо ÑÐ°ÐºÐ°Ñ Ð³ÑÐ°Ð½Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑÑÑ Ð² ÑпиÑок гÑаней на Ñдаление. ÐоÑле Ð¾Ð±Ñ Ð¾Ð´Ð° гÑаÑа ÑмежноÑÑи гÑаней ÑпиÑок гÑаниÑнÑÑ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ Ð³Ñаней и ÑпиÑок гÑаней на Ñдаление в ÑÑмме ÑодеÑÐ¶Ð°Ñ Ð²Ñе видимÑе из ÑоÑки гÑани. ТепеÑÑ ÑдалÑÑÑÑÑ Ð²Ñе гÑани из ÑпиÑка на Ñдаление. ÐÑиÑÑм ÐºÐ°Ð¶Ð´Ð°Ñ ÑдалÑÐµÐ¼Ð°Ñ Ð³ÑÐ°Ð½Ñ Ð½Ðµ ÑдалÑеÑÑÑ Ð¸Ð· ÑпиÑков ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней Ñ ÑÐ²Ð¾Ð¸Ñ ÑоÑедей. Так делаÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñно, поÑÐ¾Ð¼Ñ ÑÑо даже в ÑлÑÑае еÑли ÑоÑеднÑÑ Ð³ÑÐ°Ð½Ñ ÑвлÑеÑÑÑ Ð³ÑаниÑной видимой гÑанÑÑ, из ÑпиÑка ÐµÑ ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней в далÑнейÑем иÑполÑзÑеÑÑÑ ÑолÑко инÑоÑмаÑÐ¸Ñ Ð¾ ÑоÑедÑÑве Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñми из ÑоÑки гÑанÑми. Следом за ÑпиÑком гÑаней на Ñдаление пÑоÑмаÑÑиваеÑÑÑ ÑпиÑок гÑаниÑнÑÑ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ Ð³Ñаней. ÐÐ°Ð¶Ð´Ð°Ñ Ð³ÑаниÑÐ½Ð°Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð°Ñ Ð³ÑÐ°Ð½Ñ Â«ÑазбиÑаеÑÑÑ» (далее понадобиÑÑÑ ÐµÑ ÑпиÑок ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней и ÑпиÑок веÑÑин) и ÑдалÑеÑÑÑ. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ гÑаниÑной видимой гÑани ÑоздаÑÑÑÑ Ð½Ð¾Ð²Ñе гÑани (Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð¹ до ÑÑÑк), коÑоÑÑе добавлÑÑÑÑÑ Ð² ÑпиÑок новÑÑ Ð³Ñаней. ÐÑи ÑÑом пÑоÑмаÑÑиваеÑÑÑ ÑпиÑок ÐµÑ ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней и Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ гÑани из ÑÑого ÑпиÑка, ÑвлÑÑÑейÑÑ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ð¾Ð¹, иÑеÑÑÑ Ð¾Ð±Ñее ÑебÑо Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ гÑаниÑной видимой гÑанÑÑ. Ð ÑпиÑок веÑÑин новой гÑани вÑпиÑÑваÑÑÑÑ Ð²ÐµÑÑÐ¸Ð½Ñ Ð¾Ð±Ñие Ð´Ð»Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ð¾Ð¹ и гÑаниÑной видимой гÑаней (Ñ.е. веÑÑÐ¸Ð½Ñ Ð¾Ð±Ñего ÑебÑа), пÑиÑÑм именно в Ñом поÑÑдке, в коÑоÑом они запиÑÐ°Ð½Ñ Ð² ÑпиÑке веÑÑин гÑаниÑной видимой гÑани. РебÑо (англ. horizon ridge), кÑÑаÑи, ÑвлÑеÑÑÑ ÑаÑÑÑÑ Ð³Ð¾ÑизонÑа Ñой ÑаÑÑи повеÑÑ Ð½Ð¾ÑÑи вÑеменного многогÑанника, коÑоÑÐ°Ñ Ð²Ð¸Ð´Ð½Ð° из ÑоÑки . Та единÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑÑина гÑаниÑной видимой гÑани, коÑоÑÐ°Ñ Ð½Ðµ пÑÐµÐ½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ ÑÑÐ¾Ð¼Ñ ÑебÑÑ, заменÑеÑÑÑ Ð½Ð° ÑоÑÐºÑ Ð² ÑпиÑке веÑÑин новой гÑани, оÑÑалÑнÑе же веÑÑÐ¸Ð½Ñ â Ñе же ÑÑо и в (ÑпоÑÑдоÑенном) ÑпиÑке веÑÑин гÑаниÑной видимой гÑани и ÑÑоÑÑ Ð½Ð° ÑÐµÑ Ð¶Ðµ меÑÑÐ°Ñ . Таким обÑазом поÑÑÑоеннÑй ÑпиÑок веÑÑин новой гÑани гаÑанÑиÑÑÐµÑ ÐµÑ Ð¿ÑавилÑнÑÑ Ð¾ÑиенÑаÑиÑ, Ñо еÑÑÑ Ð¿Ñи ÑаÑÑÑÑе ÐµÑ Ð½Ð¾ÑмиÑованного ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ð»Ð¾ÑкоÑÑи ноÑÐ¼Ð°Ð»Ñ Ð±ÑÐ´ÐµÑ Ð½Ð°Ð¿Ñавлена вовне вÑеменного многогÑанника и знаÑение ÑмеÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð²ÐµÑнÑй знак. ÐоÑле Ñого, как вÑе гÑаниÑнÑе видимÑе гÑани обÑабоÑÐ°Ð½Ñ Ð¼Ñ Ð¸Ð¼ÐµÐµÐ¼ ÑпиÑок новÑÑ Ð³Ñаней. УÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð³Ð¸Ð¿ÐµÑплоÑкоÑÑей Ð´Ð»Ñ ÑÑÐ¸Ñ Ð³Ñаней возможно ÑаÑÑÑиÑаÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле Ñого, как Ð¼Ñ Ð¸Ð¼ÐµÐµÐ¼ ÑпиÑки веÑÑин Ð´Ð»Ñ Ð½Ð¸Ñ . Так же, пÑи Ñоздании новÑÑ Ð³Ñаней, в Ð¸Ñ ÑпиÑки ÑоÑÐ´ÐµÐ½Ð¸Ñ Ð³Ñаней можно добавиÑÑ Ð¿Ð¾ одной гÑани, а именно: ÑооÑвеÑÑÑвÑÑÑÑÑ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼ÑÑ Ð³ÑанÑ, коÑоÑÐ°Ñ Ð±Ñла ÑоÑедней Ð´Ð»Ñ Ð³ÑаниÑной видимой гÑани пÑи ÑоÑмиÑовании ÑпиÑка веÑÑин новой гÑани. ÐÑевидно, ÑÑо оÑÑалÑнÑе ÑоÑедние гÑани Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ иÑкаÑÑ ÑÑеди оÑÑалÑнÑÑ Ð½Ð¾Ð²ÑÑ Ð³Ñаней.
Ðак оказалоÑÑ (пÑи ÑемплиÑовании пÑоÑайлеÑом из Google Performance Tools), болÑÑе вÑего вÑемени в ÑлÑÑае болÑÑÐ¸Ñ ÑазмеÑноÑÑей и/или Ð¿Ð»Ð¾Ñ Ð¸Ñ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ (Ñ.е. когда болÑÑÐ°Ñ ÑаÑÑÑ ÑоÑек ÑвлÑеÑÑÑ Ð²ÐµÑÑинами вÑпÑклой оболоÑки) алгоÑиÑм пÑÐ¾Ð²Ð¾Ð´Ð¸Ñ Ð² поиÑке ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней Ð´Ð»Ñ Ð½Ð¾Ð²ÑÑ Ð³Ñаней. Рмоей ÑеализаÑии изнаÑалÑно алгоÑиÑм бÑл ÑÑÑÑоен пÑеделÑно пÑоÑÑо: пеÑебиÑалиÑÑ Ð²Ñе возможнÑе паÑÑ (два вложеннÑÑ Ñикла) гÑаней из ÑпиÑка новÑÑ Ð³Ñаней и пÑоизводилиÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑпоÑÑдоÑеннÑÑ (по номеÑÑ Ð¸Ð· Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑпиÑка ÑоÑек) ÑпиÑков веÑÑин Ñ Ð¾Ð´Ð½Ð¸Ð¼ неÑовпадением (модиÑиÑиÑованнÑй алгоÑиÑм std::set_difference или std::set_symmetric_difference). То еÑÑÑ ÑÑавнений, где â колиÑеÑÑво новÑÑ Ð³Ñаней. Ðо в далÑнейÑем мне ÑдалоÑÑ Ð²ÑигÑаÑÑ Ð¿Ð°ÑÑ (двоиÑнÑÑ =) поÑÑдков в ÑкоÑоÑÑи поиÑка ÑоÑÐµÐ´Ð½Ð¸Ñ Ð¸ÑполÑзовав ÑпоÑÑдоÑеннÑе аÑÑоÑиаÑивнÑе маÑÑÐ¸Ð²Ñ (std::set) в ÑÑом Ñзком меÑÑе. ÐообÑе, еÑÑÑ ÑÐµÐ»Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑÑ Ð·Ð½Ð°Ð½Ð¸Ð¹, коÑоÑÐ°Ñ ÑвÑзана Ñ ÑÑой задаÑей (опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑоÑедей) â ÑÑо locality-sensitive hashing. РоÑигиналÑной ÑеализаÑии qhull иÑполÑзÑÑÑÑÑ ÐºÐ°Ðº Ñаз Ñ ÐµÑи (не LSH). Рней Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑебÑа (двÑÑ Ð³Ñаней) Ñ ÑаниÑÑÑ Ð¾ÑделÑÐ½Ð°Ñ ÑÑÑÑкÑÑÑа даннÑÑ (ÑпиÑок веÑÑин ÑебÑа и инÑоÑмаÑÐ¸Ñ Ð¾ гÑанÑÑ Â«Ð½Ð°Ð´Â» и «под» ÑебÑом), ÐºÐ°Ð¶Ð´Ð°Ñ Ð³ÑÐ°Ð½Ñ ÑодеÑÐ¶Ð¸Ñ ÑпиÑок ÑÐ²Ð¾Ð¸Ñ ÑÑбеÑ. ÐÐ»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑоÑедÑÑва гÑаней (ÑÑеди гÑаней из ÑпиÑка новÑÑ Ð³Ñаней) Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑÐ±ÐµÑ Ð³Ñаней ÑоздаÑÑÑÑ Ð°ÑÑоÑиаÑивнÑй неÑпоÑÑдоÑеннÑй маÑÑив Ñ ÐµÑей маÑÑивов Ð¸Ñ Ð²ÐµÑÑин (Ñ Ð¾Ð´Ð½Ð¸Ð¼ пÑопÑÑком (англ. skip) и одной оÑбÑоÑеной веÑÑиной ). То еÑÑÑ Ñавнений Ñ ÐµÑей. ÐÑли пÑоиÑÑ Ð¾Ð´Ð¸Ñ ÐºÐ¾Ð»Ð»Ð¸Ð·Ð¸Ñ (и поÑледÑÑÑее полное Ñовпадение ÑпиÑков) Ñ ÐµÑей, Ñо (оÑевидно) Ñакие две гÑани имеÑÑ Ð¾Ð±Ñее ÑебÑо (Ñ ÐµÑ, кÑÑаÑи, пÑи ÑÑом можно ÑдалиÑÑ Ð´Ð»Ñ ÑменÑÑÐµÐ½Ð¸Ñ Ñ ÐµÑ-ÑаблиÑÑ) и каждÑÑ Ð¸Ð· Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ добавиÑÑ Ð² ÑпиÑок ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней дÑÑгой. ÐÑÐ¾Ñ ÑпоÑоб Ñ Ð½Ðµ иÑполÑзÑÑ, Ñак как ни в ÑÑандаÑÑной библиоÑеке, ни в STL Ð½ÐµÑ Ñакого ÑÑедÑÑва, как hash combiner (upd. поÑÑÑпила инÑоÑмаÑиÑ, ÑÑо лÑÑÑий вÑÐ±Ð¾Ñ â ÑÑо пÑоÑÑо XOR). Ð¡Ð°Ð¼Ð¾Ð¼Ñ ÑпеÑиализиÑоваÑÑ Ð±ÐµÐ· ÑеоÑеÑико-инÑоÑмаÑионного обоÑÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾ÑÑекÑноÑÑи std::hash Ð´Ð»Ñ std::vector< std::size_t > мне не Ñ Ð¾ÑелоÑÑ. Ðменно поÑÑÐ¾Ð¼Ñ Ñ Ð¸ÑполÑзовал аÑÑоÑиаÑивнÑй ÑпоÑÑдоÑеннÑй конÑÐµÐ¹Ð½ÐµÑ ÑÑÐ±ÐµÑ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней. Ð ÑезÑлÑÑаÑе (ÑÑÐ´Ñ Ð¿Ð¾ вÑемÑ) Ð¼Ð¾Ñ ÑеализаÑÐ¸Ñ Ð°Ð»Ð³Ð¾ÑиÑма пÑоигÑÑÐ²Ð°ÐµÑ qhull в ÑкоÑоÑÑи аÑимпÑоÑиÑеÑки в Ð¾Ñ Ð´Ð¾ Ñаз (Ð´Ð»Ñ Ñазного Ñода Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ ).
ÐбÑазÑом ÑлÑÐ¶Ð¸Ñ Â«ÐºÐ°Ð½Ð¾Ð½Ð¸ÑеÑкаÑ» ÑеализаÑÐ¸Ñ Ð°Ð»Ð³Ð¾ÑиÑма Quickhull qhull, ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÑеÑез Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿Ð°ÐºÐµÑов (в Ubuntu 14.04 LTS). ÐÐ»Ñ Ð³ÐµÐ½ÐµÑаÑии Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¸Ð· ÑÑого же пакеÑа qhull-bin иÑполÑзовалаÑÑ ÑÑилиÑа rbox. Ðоманда rbox t n D4 30000 s > /tmp/qhuckhull.txt ÑоздаÑÑ Ñайл Ñ ÐºÐ¾Ð¾ÑдинаÑами 30000 ÑоÑек на ÑеÑÑÑÑÑ Ð¼ÐµÑной ÑÑеÑе. Ðоманда rbox t n D10 30 s > /tmp/quickhull.txt ÑоздаÑÑ Ñайл Ñ ÐºÐ¾Ð¾ÑдинаÑами 30 ÑоÑек на деÑÑÑимеÑной ÑÑеÑе. ÐолиÑеÑÑво памÑÑи, коÑоÑое заÑÑаÑÐ¸Ð²Ð°ÐµÑ Ð¿ÑогÑамма можно поÑмоÑÑеÑÑ Ð² вÑводе ÑÑилиÑÑ /usr/bin/time Ñ ÐºÐ»ÑÑом -v. Таким обÑазом в вÑводе /usr/bin/time -v bin/quickhull /tmp/quickhull.txt | head -7 можно ÑзнаÑÑ Ð¿Ð¾ÑÑебление и памÑÑи и пÑоÑеÑÑоÑного вÑемени (оÑиÑенного Ð¾Ñ Ð²Ñемени на ÑÑение Ñайлов и вÑвод на ÑеÑминал) Ð´Ð»Ñ Ð¼Ð¾ÐµÐ¹ ÑеализаÑии, а в вÑводе /usr/bin/time -v qconvex s Qt Tv TI /tmp/quickhull.txt â Ð´Ð»Ñ Â«ÐºÐ°Ð½Ð¾Ð½Ð¸ÑеÑкой» ÑеализаÑии qhull.
ÐоÑÑекÑноÑÑÑ Ñвоей ÑеализаÑии Ñ Ð¾Ð¿ÑеделÑÑ Ð¿Ð¾ ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва гÑаней вÑпÑклÑÑ Ð¾Ð±Ð¾Ð»Ð¾Ñек. Ðо Ð´Ð»Ñ Ð¾Ñладки (в ÑÐµÐ¶Ð¸Ð¼Ð°Ñ Ð´Ð²ÑÑ - и ÑÑÑÑ Ð¼ÐµÑном) на некоÑоÑом ÑÑапе Ñ ÑеализовÑвал поÑагово (ÑеÑез ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ pause) анимиÑованнÑй вÑвод в ÑоÑмаÑе gnuplot. Ðде-Ñо в коммиÑÐ°Ñ Ð¾Ð½ еÑÑÑ. ÐÑвод пÑогÑÐ°Ð¼Ð¼Ñ â ÑÑо вÑпÑÐºÐ»Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка и пÑонÑмеÑованное множеÑÑво Ð²Ñ Ð¾Ð´Ð½ÑÑ ÑоÑек пÑедÑÑавленнÑе в ÑоÑмаÑе gnuplot.
ÐÑоме Ñого, как-Ñо бÑло наÑал пиÑаÑÑ (но не законÑил) ÑÑилиÑÑ randombox â аналог rbox. randombox задÑмÑвалаÑÑ ÐºÐ°Ðº ÑÑилиÑа, коÑоÑÐ°Ñ Ð³ÐµÐ½ÐµÑиÑÑÐµÑ ÑавномеÑно ÑаÑпÑеделÑннÑе в пÑоÑÑÑанÑÑве (англ. uniform spatial distribution) ÑоÑки, в оÑлиÑие Ð¾Ñ rbox, коÑоÑÐ°Ñ Ð³ÐµÐ½ÐµÑиÑÑÐµÑ ÑоÑки ÑаÑпÑеделÑннÑе неÑавномеÑно. randombox Ð¼Ð¾Ð¶ÐµÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ Ð½Ð°Ð±Ð¾ÑÑ ÑоÑек, огÑаниÑеннÑе ÑимплекÑом (лÑбой ÑазмеÑноÑÑи, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð° в пÑоÑÑÑанÑÑво Ñ ÑоÑками), на единиÑной ÑÑеÑе (англ. unit sphere), в ÑаÑе (англ. ball), на повеÑÑ Ð½Ð¾ÑÑи единиÑного «Ñомбовидного» многогÑанника (англ. unit diamond), внÑÑÑи единиÑного кÑба (англ. unit cube), внÑÑÑи паÑаллелоÑопа, в пÑÐµÐ´ÐµÐ»Ð°Ñ ÑÑандаÑÑного единиÑного ÑимплекÑа (англ. unit simplex), а Ñакже пÑоеÑиÑÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑоÑек в обÑÑм конÑÑа (англ. cone), либо ÑилиндÑа (англ. cylinder). ÐÐ»Ñ Ð³ÐµÐ½ÐµÑаÑии кооÑдинаÑ, ÑавномеÑно ÑаÑпÑеделÑннÑÑ Ð² пÑÐµÐ´ÐµÐ»Ð°Ñ Ð¿ÑоизволÑного ÑиплекÑа (вложимого в пÑоÑÑÑанÑÑво), Ñ Ð½Ð°ÑÑл ÑиÑленно ÑÑабилÑнÑй алгоÑиÑм в инÑеÑнеÑе (ÑеÑез ÑаÑпÑеделение ÐиÑÐ¸Ñ Ð»Ðµ), а Ñакеже пÑидÑмал Ñвой алгоÑиÑм, коÑоÑÑй не оÑлиÑаеÑÑÑ Ñаким ÑвойÑÑвом. РиÑоге вÑбÑал пеÑвÑй.
ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ Â«Ð¿Ð¾ÑÑпаÑÑ» вÑпÑклÑе оболоÑки взглÑдом, иÑполÑзÑÑ gnuplot, из коÑÐ½Ñ Ð¿ÑоекÑа введиÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ rbox n D3 40 t | bin/quickhull > /tmp/quickhull.plt && gnuplot -p -e «load '/tmp/quickhull.plt'». rbox n D3 40 t ÑгенеÑиÑÑÐµÑ 40 ÑоÑек внÑÑÑи огÑаниÑиваÑÑего кÑба (англ. bounding box). ÐлÑÑ t задаÑÑ Ð¸ÑполÑзование ÑекÑÑего вÑемени (в ÑекÑÐ½Ð´Ð°Ñ ) в каÑеÑÑве наÑалÑного знаÑÐµÐ½Ð¸Ñ ÐÐСЧ. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑоÑки на ÑÑеÑе, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ добавиÑÑ ÐºÐ»ÑÑ s. Также инÑеÑеÑно поÑмоÑÑеÑÑ ÐºÐ°Ðº ÑазбиваÑÑÑÑ Ð½ÐµÑимплиÑиалÑнÑе гÑани: rbox n D3 c â кÑб, rbox n D3 729 M1,0,1 â ÑоÑек, ÑаÑположеннÑÑ Ð² ÑелÑÑ ÑÐ·Ð»Ð°Ñ . ÐÑаÑиво вÑглÑÐ´Ð¸Ñ Ð²ÑпÑÐºÐ»Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка ÑпиÑали (англ. helix): rbox n D3 50 l. Ð ÑлÑÑае одновÑеменного ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑого колиÑеÑÑва ÑоÑек, компланаÑнÑÑ Ð³ÑанÑм, болÑÑое знаÑение Ð´Ð»Ñ ÐºÐ¾ÑÑекÑноÑÑи ÑезÑлÑÑаÑов наÑÐ¸Ð½Ð°ÐµÑ Ð¸Ð³ÑаÑÑ ÐºÐ¾Ð½ÑÑанÑа eps, коÑоÑÐ°Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿Ñи конÑÑÑÑиÑовании обÑекÑа алгоÑиÑма. ÐапÑимеÑ, еÑли иÑполÑзоваÑÑ Ð² каÑеÑÑве малого знаÑÐµÐ½Ð¸Ñ std::numeric_limits< value_type >::epsilon(), Ñо в ÑлÑÑае «повÑÑнÑÑого» кÑба из 64 ÑелÑÑ ÑоÑек rbox n D3 64 M3,4 в ÑезÑлÑÑаÑе ÑабоÑÑ Ð°Ð»Ð³Ð¾ÑиÑма Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑй геомеÑÑиÑеÑкий обÑекÑ, не ÑвлÑÑÑийÑÑ Ð²ÑпÑклÑм многоÑголÑником.
ÐÑогом Ð¼Ð¾Ð¸Ñ ÑÑÑдов ÑвилаÑÑ ÑелизаÑÐ¸Ñ Ð°Ð»Ð³Ð¾ÑиÑма Quickhull на C++, доволÑно компакÑÐ½Ð°Ñ Ð¸ не ÑилÑно более медленнаÑ, Ñем ÑеализаÑÐ¸Ñ Ñ qhull.org. ÐлгоÑиÑм полÑÑÐ°ÐµÑ Ð½Ð° Ð²Ñ Ð¾Ð´Ðµ знаÑение ÑазмеÑноÑÑи пÑоÑÑÑанÑÑва, знаÑение малой конÑÑанÑÑ eps и Ð½Ð°Ð±Ð¾Ñ ÑоÑек, пÑедÑÑавлÑемÑй как диапазон, задаваемÑй паÑой иÑеÑаÑоÑов Ñак, как ÑÑо пÑинÑÑо в STL. Ðа пеÑвом ÑÑапе create_simplex ÑÑÑоиÑÑÑ ÑÑаÑÑовÑй ÑÐ¸Ð¼Ð¿Ð»ÐµÐºÑ Ð¸ возвÑаÑаеÑÑÑ ÑоÑеÑнÑй Ð±Ð°Ð·Ð¸Ñ Ð°ÑÑинного (под)пÑоÑÑÑанÑÑва, вмеÑаÑÑего Ð²Ñ Ð¾Ð´Ð½Ñе ÑоÑки. ÐÑли колиÑеÑÑво ÑоÑек в базиÑе болÑÑе, Ñем ÑазмеÑноÑÑÑ Ðвклидова пÑоÑÑÑанÑÑва, вмеÑаÑÑего ÑоÑки, Ñо далее запÑÑкаеÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑм доÑÑÑойки вÑпÑклой оболоÑки. Ðа вÑÑ Ð¾Ð´Ðµ алгоÑиÑм даÑÑ Ð¼Ð°ÑÑив ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , опиÑÑваÑÑÐ¸Ñ Ð³Ñани вÑпÑклой оболоÑки Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ множеÑÑва, коÑоÑÑй и ÑвлÑеÑÑÑ Ð¾ÑвеÑом. Ð ÑлÑÑае неÑдаÑи полÑÑаеÑÑÑ ÑоÑеÑнÑй Ð±Ð°Ð·Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑого подпÑоÑÑÑанÑÑва менÑÑей ÑазмеÑноÑÑи, коÑоÑое вмеÑÐ°ÐµÑ Ð²Ñе ÑоÑки. ÐÑполÑзÑÑ Ð°Ð»Ð³Ð¾ÑиÑм ХаÑÑÑ Ð¾Ð»Ð´ÐµÑа можно некоÑоÑÑм обÑазом повеÑнÑÑÑ Ð²Ñ Ð¾Ð´Ð½Ð¾Ðµ множеÑÑво, занÑлив пÑи ÑÑом ÑÑаÑÑие кооÑдинаÑÑ ÑоÑек. Такие кооÑдинаÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ оÑбÑоÑиÑÑ Ð¸ пÑимениÑÑ Ð°Ð»Ð³Ð¾ÑиÑм Quickhull Ñже в пÑоÑÑÑанÑÑве менÑÑей ÑазмеÑноÑÑи. ÐоÑледнее не имплеменÑиÑовано.
У данного алгоÑиÑма еÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво пÑиложений. ÐÑоме Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²ÑпÑклой оболоÑки как Ñаковой, благодаÑÑ ÑомÑ, ÑÑо ÑÑÑеÑÑвÑÐµÑ ÑвÑÐ·Ñ Ð¼ÐµÐ¶Ð´Ñ Ð²ÑпÑклой оболоÑкой, ÑÑиангÑлÑÑией Ðелоне и диагÑаммой ÐоÑоного, неÑложно найÑи пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°Ð»Ð³Ð¾ÑиÑÐ¼Ñ Â«Ð¾Ð¿Ð¾ÑÑедованно».
ÐÐ°Ð½Ð½Ð°Ñ ÑеализаÑÐ¸Ñ Ñже кое-ÐºÐ¾Ð¼Ñ Ð¿ÑигодилаÑÑ, и бÑла оплаÑена благодаÑноÑÑÑÑ (в Acknowledgements), ÑÑо оÑÐµÐ½Ñ Ð¿ÑиÑÑно.
24.06.2015 г.: Ðобавлена пÑовеÑка вÑпÑклоÑÑи полÑÑаемой геомеÑÑиÑеÑкой ÑÑÑÑкÑÑÑÑ Ð¿Ð¾ алгоÑиÑÐ¼Ñ Kurt Mehlhorn, Stefan Näher, Thomas Schilz, Stefan Schirra, Michael Seel, Raimund Seidel, and Christian Uhrig. Checking geometric programs or verification of geometric structures. In Proc. 12th Annu. ACM Sympos. Comput. Geom., pages 159â165, 1996.
24.06.2015 г.: ÐÑани полÑÑаемого многогÑанника ÑепеÑÑ ÑодеÑÐ¶Ð°Ñ Ð½Ð°Ð±Ð¾ÑÑ Ð²ÐµÑÑин и индекÑов ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней ÑпоÑÑдоÑеннÑе Ñаким обÑазом, ÑÑо гÑÐ°Ð½Ñ ÑвлÑеÑÑÑ Ð¿ÑоÑиволежаÑей (англ. opposite) ÑооÑвеÑÑÑвенной веÑÑине. ÐÑо Ð´ÐµÐ»Ð°ÐµÑ ÑÑÑÑкÑÑÑÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ более Ñдобной пÑи иÑполÑзовании в некоÑоÑÑÑ ÑлÑÑаÑÑ .
24.06.2015 г.: ТепеÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑоÑедÑÑва Ð²Ð½Ð¾Ð²Ñ Ð¿Ð¾Ð»ÑÑаемÑÑ Ð³Ñаней иÑполÑзÑÑÑÑÑ Ð¸Ñ Ñ ÑÑи.
ÐÐ»Ñ ÑеализаÑии одномеÑного ÑлÑÑÐ°Ñ Ð°Ð»Ð³Ð¾ÑиÑма Quickhull годиÑÑÑ ÑÑнкÑÐ¸Ñ std::minmax_element. Ð ÑеÑи можно найÑи множеÑÑво ÑеализаÑий алгоÑиÑма Quickhull Ð´Ð»Ñ Ð¿Ð»Ð¾Ñкого ÑлÑÑаÑ. Ðднако, Ð´Ð»Ñ ÑлÑÑÐ°Ñ Ð¿ÑоизволÑной ÑазмеÑноÑÑи ÑÑ Ð¾Ð´Ñ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð»Ð¸ÑÑ Ð¾Ð´Ð½Ð° ÑÑжÑловеÑÐ½Ð°Ñ ÑеализаÑÐ¸Ñ Ñ ÑайÑа qhull.org.
Ð ÑÐºÐ¾Ð±ÐºÐ°Ñ ÑÑдом Ñ ÑеÑминами Ñ Ð±ÑÐ´Ñ Ð´Ð°Ð²Ð°ÑÑ Ð¿ÐµÑевод на английÑкий (в ÑÑиле ТÑÒбо, Ñж извиниÑе). ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ ÑÐµÑ , кÑо еÑÑ Ð½Ðµ знаком Ñ ÑеÑминами и бÑÐ´ÐµÑ ÑиÑаÑÑ Ð°Ð½Ð³Ð»Ð¾ÑзÑÑнÑе ÑекÑÑÑ Ð¿Ð¾ ÑÑÑлкам, либо ÑеÑÐ¸Ñ ÑазобÑаÑÑÑÑ Ñ ÑекÑÑами иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кода.
УпомÑнÑÑÐ°Ñ Ð²ÑÑе «канониÑеÑкаÑ» ÑеализаÑÐ¸Ñ Ð½Ð°Ð¿Ð¸Ñана на C (еÑÑÑ C++ биндинги), иÑполÑзÑеÑÑÑ Ð´Ð°Ð²Ð½Ð¾ и ÑиÑоко (в ÑоÑÑаве пакеÑов GNU Octave и MATLAB) и, ÑледоваÑелÑно, Ñ Ð¾ÑоÑо пÑовеÑена. Ðо еÑли Ð²Ñ ÑеÑиÑе изолиÑоваÑÑ ÐºÐ¾Ð´, оÑноÑÑÑийÑÑ ÑолÑко лиÑÑ Ðº Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð°Ð»Ð³Ð¾ÑиÑÐ¼Ñ Quickhull, Ñо ÑÑолкнÑÑеÑÑ Ñо ÑложноÑÑÑми. ÐÐ»Ñ Ð¿ÑоÑÑейÑÐ¸Ñ Ð¿Ñименений Ñ Ð¾ÑелоÑÑ Ð±Ñ Ð¸Ð¼ÐµÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾Ð±Ñ Ð¾Ð´Ð¸ÑÑÑ Ñем-Ñо более компакÑнÑм. Ðемного поÑÑаÑавÑиÑÑ, Ñ Ð½Ð°Ð¿Ð¸Ñал ÑÐ²Ð¾Ñ ÑеализаÑÐ¸Ñ (https://github.com/tomilov/quickhull): ÑÑо единÑÑвеннÑй клаÑÑ, без завиÑимоÑÑей. ÐÑего поÑÑдка 750 ÑÑÑок.
ÐеомеÑÑиÑеÑкие понÑÑиÑ.
ÐаÑÐ¸Ð½Ð°Ñ ÑабоÑаÑÑ Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð¼ÐµÑнÑми ÑÑÑноÑÑÑми, понимаеÑÑ, ÑÑо ÑпÑÐ°Ð²ÐµÐ´Ð»Ð¸Ð²Ñ ÐºÐ°ÐºÐ¸Ðµ-Ñо аналогии Ñ Ð¿ÑивÑÑнÑми двÑÑ Ð¼ÐµÑнÑми и ÑÑÑÑ Ð¼ÐµÑнÑми обÑекÑами. ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ неÑколÑко ÑпоÑÑдоÑиÑÑ Ð·Ð½Ð°Ð½Ð¸Ñ: ввеÑÑи некоÑоÑÑе новÑе ÑеÑÐ¼Ð¸Ð½Ñ Ð¸ пÑоÑÑниÑÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð½Ð¸Ð¼Ð¸.
ÐÐ»Ñ Ð¿ÑогÑаммиÑÑа геомеÑÑиÑеÑкие обÑекÑÑ â ÑÑо пÑежде вÑего ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ . ÐÐ»Ñ Ð½Ð°Ñала Ñ Ð´Ð°Ð¼ геомеÑÑиÑеÑкие опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ (не оÑÐµÐ½Ñ ÑÑÑогие). ÐалÑÑе по ÑекÑÑÑ Ð±ÑдÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑооÑвеÑÑÑвеннÑÑ ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑдобнÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ñ ÑаниÑÑ Ð´Ð°Ð½Ð½Ñе и опеÑиÑоваÑÑ Ñ Ð½Ð¸Ð¼Ð¸ доÑÑаÑоÑно ÑÑÑекÑивно.
ÐбознаÑим ÑазмеÑноÑÑÑ Ð¿ÑоÑÑÑанÑÑва как .
- Ð¡Ð¸Ð¼Ð¿Ð»ÐµÐºÑ (англ. simplex) задаÑÑÑÑ Ð°ÑÑинно незавиÑимой (англ. affinely independent) ÑоÑкой. Ðб аÑÑинной незавиÑимоÑÑи поÑÑÐ½Ñ Ð´Ð°Ð»ÐµÐµ. ÐÑи ÑоÑки назÑваÑÑÑÑ Ð²ÐµÑÑинами (англ. ед. vertex, мн. vertices).
- ÐногогÑанник (Ñин. полиÑоп, полиÑдÑ, англ. polytope, polyhedron) опÑеделÑеÑÑÑ ÐºÐ°Ðº минимÑм ÑоÑкой (веÑÑиной), из коÑоÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑвлÑÑÑÑÑ Ð°ÑÑинно незавиÑимÑми; ÑÐ¸Ð¼Ð¿Ð»ÐµÐºÑ (англ. simplicial polytope) â пÑоÑÑейÑий ÑлÑÑай -меÑного Ñела: многогÑанники Ñ Ð¼ÐµÐ½ÑÑим ÑиÑлом веÑÑин обÑзаÑелÑно бÑдÑÑ Ð¸Ð¼ÐµÑÑ Ð½Ñлевой -меÑнÑй обÑÑм.
- ÐаÑаллелоÑоп (англ. parallelotope) â обобÑение плоÑкого паÑаллелогÑамма и обÑÑмного паÑаллелепипеда. ÐÐ»Ñ ÑимплекÑа можно поÑÑÑоиÑÑ ÑооÑвеÑÑÑвеннÑÑ Ð¿Ð°ÑаллелоÑопов (вÑе они бÑдÑÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй обÑÑм, ÑавнÑй обÑÑмам ÑимплекÑа), взÑв в каÑеÑÑве обÑазÑÑÑÐ¸Ñ (векÑоÑов) паÑаллелоÑопа векÑоÑа, вÑÑ Ð¾Ð´ÑÑие из одной ÑикÑиÑованной веÑÑÐ¸Ð½Ñ Ð² каждÑÑ Ð¸Ð· оÑÑалÑнÑÑ Ð²ÐµÑÑин.
- ÐонÑÑие вÑпÑклого многогÑанника (англ. convex polytope, convex polyhedron) Ñ Ð·Ð´ÐµÑÑ Ð¿ÑиводиÑÑ Ð½Ðµ бÑдÑ, ÑгодиÑÑÑ Ð²Ð°Ñе инÑÑиÑивное пÑедÑÑавление о нÑм. СимплекÑ, ÑаÑÑмаÑÑиваемÑй как ÑаÑÑнÑй ÑлÑÑай многогÑанника, вÑегда ÑвлÑеÑÑÑ Ð²ÑпÑклÑм.
- ÐонÑÑие плоÑкоÑÑи ÑвлÑеÑÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ñм и неопÑеделÑемÑм. ÐамеÑÑ, ÑÑо она Ð¸Ð¼ÐµÐµÑ Ð½Ð° единиÑÑ Ð¼ÐµÐ½ÑÑÑÑ ÑазмеÑноÑÑÑ, Ñем пÑоÑÑÑанÑÑво, в коÑоÑое вложена.
- СимплиÑиалÑÐ½Ð°Ñ Ð³ÑÐ°Ð½Ñ (англ. simplicial facet) опÑеделÑеÑÑÑ Ð°ÑÑинно незавиÑимÑми ÑоÑками (веÑÑинами). Ðалее ÑеÑÑ Ð±ÑÐ´ÐµÑ Ð¸Ð´Ñи ÑолÑко о ÑимплиÑиалÑнÑÑ Ð¾Ð±ÑекÑÐ°Ñ (кÑоме вÑпÑклого многогÑанника), Ñак ÑÑо опÑеделение «ÑимплиÑиалÑнÑй» Ñ Ð±ÑÐ´Ñ Ð¾Ð¿ÑÑкаÑÑ. Ðногие ÑÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð² далÑнейÑем бÑдÑÑ ÑпÑÐ°Ð²ÐµÐ´Ð»Ð¸Ð²Ñ ÑолÑко Ð´Ð»Ñ Ð½ÐµÐ²ÑÑожденнÑÑ (вÑе ÑоÑки попаÑно ÑазлиÑнÑ) ÑлÑÑаев ÑимплиÑиалÑнÑÑ Ð³ÐµÐ¾Ð¼ÐµÑÑиÑеÑÐºÐ¸Ñ Ð¾Ð±ÑекÑов.
- РебÑо (англ. ridge) опÑеделÑеÑÑÑ ÐºÐ°Ðº пеÑеÑеÑение двÑÑ Ð³Ñаней и Ð¸Ð¼ÐµÐµÑ Ð²ÐµÑÑинÑ. Ðве гÑани могÑÑ Ð¸Ð¼ÐµÑÑ ÑолÑко одно обÑее ÑебÑо. Ðдна гÑанÑ, Ñаким обÑазом, Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ ÑоÑедей ÑеÑез ÑÑбÑа.
- Ðик (англ. peak) опÑеделÑеÑÑÑ ÑоÑками. ÐдеÑÑ Ð¸Ð½ÑÑиÑÐ¸Ð²Ð½Ð°Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ Ñ ÑÑÑÑ Ð¼ÐµÑнÑм пÑоÑÑÑанÑÑвом Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¿Ð»ÑÑÑ, Ñак как понÑÑие пика и веÑÑÐ¸Ð½Ñ Ð½Ðµ ÑовпадаÑÑ, но Ñакими обÑекÑами Ð¼Ñ Ð½Ðµ бÑдем опеÑиÑоваÑÑ. ÐÑÐ°Ð½Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð»Ñбое колиÑеÑÑво ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней ÑеÑез пик, оÑÑÑда можно ÑделаÑÑ Ð²Ñвод, ÑÑо Ñ ÑаниÑÑ Ð³ÑÐ°Ñ ÑмежноÑÑи гÑаней ÑеÑез пики накладно и по памÑÑи и по заÑÑаÑам на поддеÑÐ¶ÐºÑ Ð°ÐºÑÑалÑноÑÑи ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¿Ñи ÐºÐ°ÐºÐ¸Ñ -либо пÑеобÑазованиÑÑ .
ÐÑÐ°Ð½Ñ Ð¼Ð½Ð¾Ð³Ð¾Ð³Ñанника, ÐµÑ Ð³ÑаниÑÑ, гÑаниÑÑ ÐµÑ Ð³ÑÐ°Ð½Ð¸Ñ Ð¸ Ñ.д. на английÑком именÑÑÑÑÑ face. Ðам ÑÑÑÐ»ÐºÑ Ð½Ð° Ñ Ð¾ÑоÑий ÑеÑÑÑÑ, где логиÑеÑки обоÑновÑваеÑÑÑ, ÑÑо в -меÑном пÑоÑÑÑанÑÑве видимÑми или наблÑдаемÑми обÑекÑами могÑÑ ÑвлÑÑÑÑÑ ÑолÑко лиÑÑ -меÑнÑе обÑекÑÑ, Ñо еÑÑÑ Ð³ÑаниÑÑ (англ. boundaries) -меÑнÑÑ Ð¾Ð±ÑекÑов. ÐнглийÑкий ÑеÑмин facet â ÑÑо именно наблÑÐ´Ð°ÐµÐ¼Ð°Ñ Ð³ÑанÑ. ÐÑÑÐ¼Ð°Ñ (англ. straight line) â ÑÑо вÑегда одномеÑÐ½Ð°Ñ ÑÑÑноÑÑÑ. ТоÑÐºÑ (веÑÑинÑ) можно в ÑÑой гÑадаÑии ÑÑиÑаÑÑ Ð½ÑлÑ-меÑной.
ÐÐ¼ÐµÑ Ð´ÐµÐ»Ð¾ Ñ Ð½ÐµÐºÐ¾ÑоÑÑм набоÑом из ÑоÑек, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ пеÑейÑи к ÑаÑÑмоÑÑÐµÐ½Ð¸Ñ ÑооÑвеÑÑÑвенного набоÑа из векÑоÑов, вÑÑÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð· ÑоÑек из вÑÐµÑ Ð´ÑÑÐ³Ð¸Ñ . Таким обÑазом Ð¼Ñ ÐºÐ°Ðº Ð±Ñ Ð½Ð°Ð·Ð½Ð°Ñим ÑÑÑ ÑоÑÐºÑ Ð½Ð°Ñалом кооÑÐ´Ð¸Ð½Ð°Ñ (англ. origin). ÐÑли вÑе ÑоÑки лежали в одной плоÑкоÑÑи, Ñо плоÑкоÑÑÑ ÑмеÑаеÑÑÑ Ñаким обÑазом, ÑÑо наÑÐ¸Ð½Ð°ÐµÑ Ð¿ÑÐ¾Ñ Ð¾Ð´Ð¸ÑÑ ÑеÑез наÑало кооÑдинаÑ. ÐÑÑÐ¸Ð½Ð½Ð°Ñ Ð½ÐµÐ·Ð°Ð²Ð¸ÑимоÑÑÑ ÑоÑек вÑполнÑеÑÑÑ, когда вÑполнÑеÑÑÑ Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð½ÐµÐ·Ð°Ð²Ð¸ÑимоÑÑÑ -го ÑооÑвеÑÑÑвенного векÑоÑа. ÐпÑеделение линейной незавиÑимоÑÑи векÑоÑов вам ÑкоÑей вÑего Ñже знакомо. Таким обÑазом в -меÑном пÑоÑÑÑанÑÑве нелÑÐ·Ñ Ð²ÑбÑаÑÑ Ð±Ð¾Ð»ÑÑе ÑоÑки Ñак, ÑÑÐ¾Ð±Ñ Ð²Ñе они бÑли аÑÑинно незавиÑимÑ. ÐоÑÑÐ½Ñ ÑÑо: в ÑÑÑÑ Ð¼ÐµÑном пÑоÑÑÑанÑÑве ÑÑеÑголÑник (гÑÐ°Ð½Ñ ÑÑÑÑ Ð¼ÐµÑного ÑимплекÑа â ÑеÑÑаÑдÑа) задан ÑÑÐµÐ¼Ñ ÑоÑками (не лежаÑими на одной пÑÑмой, конеÑно); ÑеÑез ÑÑи ÑÑи ÑоÑки пÑÐ¾Ñ Ð¾Ð´Ð¸Ñ ÐµÐ´Ð¸Ð½ÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð¿Ð»Ð¾ÑкоÑÑÑ; лÑÐ±Ð°Ñ ÑоÑка ÑÑой плоÑкоÑÑи, Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÐºÐ¾ множеÑÑÐ²Ñ Ð¸Ð· ÑÑÑÑ Ð²ÐµÑÑин ÑÑеÑголÑника пÑевÑаÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½ÐµÑÑво ÑÑÑÑ Ð°ÑÑинно незавиÑимÑÑ ÑоÑек в множеÑÑво 4 аÑÑинно завиÑимÑÑ . ÐÐ½Ð°Ð»Ð¾Ð³Ð¸Ñ ÑпÑаведлива Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ ÑазмеÑноÑÑей.
ÐÑоме вÑего пÑоÑего Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ввеÑÑи понÑÑие гипеÑобÑÑма (англ. hypervolume).
ÐипеÑобÑÑм.
ÐÑбой ÑаÑÑмоÑÑенÑй обÑÐµÐºÑ Ð¸Ð· ÑÑда ÑимплекÑ, гÑанÑ, ÑебÑо, пик и Ñ.д. огÑаниÑÐµÐ½Ñ Ð² ÑооÑвеÑÑÑвенном подпÑоÑÑÑанÑÑве. «ÐолиÑеÑÑво меÑÑа», коÑоÑое Ñакой обÑÐµÐºÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ, можно измеÑиÑÑ/опÑеделиÑÑ/задаÑÑ. ÐÐ»Ñ Ð¾Ð´Ð½Ð¾Ð¼ÐµÑной пÑÑмой меÑа назÑваеÑÑÑ Ð´Ð»Ð¸Ð½Ð¾Ð¹; Ð´Ð»Ñ Ð´Ð²ÑмеÑной плоÑкоÑÑи, меÑа назÑваеÑÑÑ Ð¿Ð»Ð¾ÑадÑÑ; Ð´Ð»Ñ ÑÑÑÑ
меÑного Ñела â обÑÑм. ÐонÑÑие можно обобÑиÑÑ, назвав D-меÑнÑм обÑÑмом или D-гипеÑобÑÑмом. ÐÐ»Ñ ÑимплекÑа, обÑазованного попаÑно ÑазлиÑнÑми ÑоÑками (поÑÑдок пеÑеÑиÑÐ»ÐµÐ½Ð¸Ñ ÑоÑек важен), гипеÑобÑÑм вÑÑиÑлиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñак:
ÐдеÑÑ Ð¼Ñ Ð²ÑпиÑали кооÑдинаÑÑ Ð²ÐµÐºÑоÑов в ÑÑÑоки. ÐналогиÑнÑе ÑоÑмÑÐ»Ñ Ð¸ ÑаÑÑÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑивеÑÑи и Ð´Ð»Ñ Ð²ÐµÐºÑоÑов-ÑÑолбÑов (Ñ.е. еÑли Ð¼Ñ ÑÑанÑпониÑÑем вÑе маÑÑиÑÑ, Ñо на ÑезÑлÑÑÐ°Ñ Ð¸ вÑÐ²Ð¾Ð´Ñ ÑÑо не повлиÑеÑ).
ÐелиÑÐµÐ»Ñ Ð´ÐµÑеÑминанÑа в ÑоÑмÑле вÑÑе â ÑÑо колиÑеÑÑво ÑимплекÑов (вÑе они имеÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй обÑÑм), на коÑоÑÑй можно ÑазбиÑÑ Ð¿Ð°ÑаллелоÑоп , поÑÑÑоеннÑй на векÑоÑÐ°Ñ . СооÑвеÑÑÑвенно Ñам деÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ â ÑÑо гипеÑобÑÑм паÑаллелоÑопа. ÐнÑеÑеÑÑÑÑимÑÑ Ð¾ÑнованиÑми, лежаÑими в оÑнове ÑÑого ÑÑвеÑждениÑ, ÑекомендÑÑ Ð¿ÑоÑиÑаÑÑ Ð¿Ñо опÑеделиÑÐµÐ»Ñ Ð¼Ð°ÑÑиÑÑ ÐÑама и о его геомеÑÑиÑеÑкой инÑеÑпÑеÑаÑии.
СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо Ð´Ð°Ð½Ð½Ð°Ñ Ð¼ÐµÑа Ð´Ð»Ñ Â«Ð¾Ð±ÑÑмнÑÑ Â» обÑекÑов бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð½ÐµÐ½Ñлевое знаÑение, а Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ°Ðº положиÑелÑной, Ñак и оÑÑиÑаÑелÑной велиÑиной. ÐонÑÑÑ ÑмÑÑл знака неÑÑÑдно из ÑледÑÑÑÐ¸Ñ ÑообÑажений: пÑи обмене меÑÑами двÑÑ ÑоÑек ÑимплекÑа Ð¼Ñ Ð¿Ð¾Ð»ÑÑаем ÑÐ¼ÐµÐ½Ñ Ð·Ð½Ð°ÐºÐ° деÑеÑминанÑа; поÑÑдок ÑоÑек â ÑÑо «лево- и пÑаво- оÑиенÑиÑованноÑÑÑ» ÑимплекÑа. Ðа плоÑкоÑÑи ÑÑо неÑложно Ñебе пÑедÑÑавиÑÑ: еÑли ÑÑоÑÐ¾Ð½Ñ ÑÑеÑголÑника пеÑеÑиÑÐ»ÐµÐ½Ñ Ð¿ÑоÑив ÑаÑовой ÑÑÑелки , Ñо опÑеделиÑÐµÐ»Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñелен , инаÑе â оÑÑиÑаÑелен . ÐÐ»Ñ ÑеÑÑаÑдÑа знак бÑÐ´ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ Ñого, в каком поÑÑдке (по ÑаÑовой ÑÑÑелке или пÑоÑив) пеÑвÑе 3 ÑоÑки бÑдÑÑ Ð¿ÐµÑеÑиÑлÑÑÑÑÑ Ð¿Ñи взглÑде на Ð½Ð¸Ñ Ð¸Ð· поÑледней. Таким обÑазом, в далÑнейÑем, пÑи задании геомеÑÑиÑеÑÐºÐ¸Ñ Ð¾Ð±ÑекÑов, Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑинÑÑÑ, ÑÑо поÑÑдок пеÑеÑиÑÐ»ÐµÐ½Ð¸Ñ ÑоÑек должен бÑÑÑ ÑикÑиÑованнÑм.
ÐножиÑÐµÐ»Ñ Ð¿ÐµÑед деÑеÑминанÑом Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ опÑÑÑиÑÑ, Ñак как в алгоÑиÑме бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð»Ð¸ÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ знаке велиÑÐ¸Ð½Ñ Ð¾ÑиенÑиÑованного гипеÑобÑÑма.
ÐеÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ Ñавен нÑлÑ, еÑли Ñ Ð¾ÑÑ Ð±Ñ Ð´Ð²Ðµ ÑÑÑоки линейно завиÑÐ¸Ð¼Ñ (помним, ÑÑо ÑоÑки попаÑно ÑазлиÑнÑ, Ñо еÑÑÑ Ð½Ð¸ одна ÑÑÑока не нÑлеваÑ). ÐеÑложно пÑовеÑиÑÑ ÑооÑвеÑÑÑвие пÑиведÑннÑÑ Ð²ÑÑе ÑаÑÑÑждений об аÑÑинно завиÑимÑÑ ÑоÑÐºÐ°Ñ Ð¸ линейно завиÑимÑÑ Ð²ÐµÐºÑоÑÐ°Ñ , ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ð¸Ð¼.
Ðа абÑолÑÑное знаÑение деÑеÑминанÑа не бÑÐ´ÐµÑ Ð²Ð»Ð¸ÑÑÑ Ñо, какÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ÑоÑÐºÑ Ð²ÑÑиÑаем пÑи пеÑÐµÑ Ð¾Ð´Ðµ к векÑоÑам, â ÑолÑко на знак. СледÑÐµÑ Ð²ÑÑиÑаÑÑ Ð²Ñегда поÑледнÑÑ ÑоÑÐºÑ Ð¸Ð· пеÑвÑÑ , инаÑе Ð´Ð»Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾ оÑиенÑиÑованнÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑÑ Ð¾Ð±ÑекÑов, иÑполÑзÑемÑÑ Ð² далÑнейÑем, знак меÑÑ Ð±ÑÐ´ÐµÑ ÑазнÑм в ÑÑÑнÑÑ Ð¸ неÑÑÑнÑÑ ÑазмеÑноÑÑÑÑ .
ЧÑо же делаÑÑ Ñ Ð¼ÐµÑой обÑекÑов, вложеннÑÑ Ð² пÑоÑÑÑанÑÑво ÑлиÑком болÑÑой ÑазмеÑноÑÑи, напÑимеÑ, Ñ Ð¼ÐµÑой гÑаней? ÐÑли Ð¼Ñ ÑконÑÑÑÑиÑÑем маÑÑиÑÑ Ñак же, как ÑÑо показано вÑÑе, Ñо она бÑÐ´ÐµÑ Ð¿ÑÑмоÑголÑнаÑ. ÐеÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ Ð¾Ñ Ñакой маÑÑиÑÑ Ð²Ð·ÑÑÑ Ð½Ðµ полÑÑиÑÑÑ. ÐказÑваеÑÑÑ ÑоÑмÑÐ»Ñ Ð¼Ð¾Ð¶Ð½Ð¾ обобÑиÑÑ (ÑÑо обобÑение ÑвÑзано Ñ ÑоÑмÑлой Ðине-ÐоÑи), иÑполÑзÑÑ Ð²ÑÑ ÑÑ Ð¶Ðµ маÑÑиÑÑ ÑоÑÑавленнÑÑ Ð¸Ð· векÑоÑов-ÑÑÑок:
ÐÐ»Ñ Ð°ÑÑинно незавиÑимÑÑ Ð¿Ð¾Ð¿Ð°Ñно ÑазлиÑнÑÑ ÑоÑек маÑÑиÑа под деÑеÑминанÑом вÑегда полÑÑаеÑÑÑ ÐºÐ²Ð°Ð´ÑаÑной положиÑелÑно опÑеделÑнной, а Ñам деÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ Ñакой маÑÑиÑÑ â ÑиÑло вÑегда положиÑелÑное. ÐÐ»Ñ Ð°ÑÑинно завиÑимÑÑ ÑоÑек маÑÑиÑа полÑÑиÑÑÑ ÑингÑлÑÑной (Ñ.е. ÐµÑ Ð¾Ð¿ÑеделиÑÐµÐ»Ñ Ñавен нÑлÑ). ЯÑно, ÑÑо меÑа вÑегда неоÑÑиÑаÑелÑÐ½Ð°Ñ Ð¸ инÑоÑмаÑии об оÑиенÑаÑии Ð¼Ñ Ð½Ðµ имеем.
С одной ÑÑоÑонÑ, деÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ Ð¿ÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ²Ð°Ð´ÑаÑнÑÑ Ð¼Ð°ÑÑÐ¸Ñ Ñавен пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´ÐµÑеÑминанÑов, Ñ Ð´ÑÑгой â деÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ ÑÑанÑпониÑованной квадÑаÑной маÑÑиÑÑ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð´ÐµÑеÑминанÑом иÑÑ Ð¾Ð´Ð½Ð¾Ð¹, Ñаким обÑазом поÑледнÑÑ ÑоÑмÑла ÑводиÑÑÑ Ðº ÑоÑмÑле Ð´Ð»Ñ ÑоÑки, за иÑклÑÑением коÑÐ½Ñ Ð¸Ð· квадÑаÑа, Ñ.е. модÑлÑ, коÑоÑÑй Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ опÑÑÑиÑÑ, Ñ ÑелÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± оÑноÑиÑелÑной оÑиенÑаÑии ÑоÑек в пÑоÑÑÑанÑÑве.
ÐдеÑÑ Ð¼Ñ Ð²ÑпиÑали кооÑдинаÑÑ Ð²ÐµÐºÑоÑов в ÑÑÑоки. ÐналогиÑнÑе ÑоÑмÑÐ»Ñ Ð¸ ÑаÑÑÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑивеÑÑи и Ð´Ð»Ñ Ð²ÐµÐºÑоÑов-ÑÑолбÑов (Ñ.е. еÑли Ð¼Ñ ÑÑанÑпониÑÑем вÑе маÑÑиÑÑ, Ñо на ÑезÑлÑÑÐ°Ñ Ð¸ вÑÐ²Ð¾Ð´Ñ ÑÑо не повлиÑеÑ).
ÐелиÑÐµÐ»Ñ Ð´ÐµÑеÑминанÑа в ÑоÑмÑле вÑÑе â ÑÑо колиÑеÑÑво ÑимплекÑов (вÑе они имеÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй обÑÑм), на коÑоÑÑй можно ÑазбиÑÑ Ð¿Ð°ÑаллелоÑоп , поÑÑÑоеннÑй на векÑоÑÐ°Ñ . СооÑвеÑÑÑвенно Ñам деÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ â ÑÑо гипеÑобÑÑм паÑаллелоÑопа. ÐнÑеÑеÑÑÑÑимÑÑ Ð¾ÑнованиÑми, лежаÑими в оÑнове ÑÑого ÑÑвеÑждениÑ, ÑекомендÑÑ Ð¿ÑоÑиÑаÑÑ Ð¿Ñо опÑеделиÑÐµÐ»Ñ Ð¼Ð°ÑÑиÑÑ ÐÑама и о его геомеÑÑиÑеÑкой инÑеÑпÑеÑаÑии.
СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо Ð´Ð°Ð½Ð½Ð°Ñ Ð¼ÐµÑа Ð´Ð»Ñ Â«Ð¾Ð±ÑÑмнÑÑ Â» обÑекÑов бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð½ÐµÐ½Ñлевое знаÑение, а Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ°Ðº положиÑелÑной, Ñак и оÑÑиÑаÑелÑной велиÑиной. ÐонÑÑÑ ÑмÑÑл знака неÑÑÑдно из ÑледÑÑÑÐ¸Ñ ÑообÑажений: пÑи обмене меÑÑами двÑÑ ÑоÑек ÑимплекÑа Ð¼Ñ Ð¿Ð¾Ð»ÑÑаем ÑÐ¼ÐµÐ½Ñ Ð·Ð½Ð°ÐºÐ° деÑеÑминанÑа; поÑÑдок ÑоÑек â ÑÑо «лево- и пÑаво- оÑиенÑиÑованноÑÑÑ» ÑимплекÑа. Ðа плоÑкоÑÑи ÑÑо неÑложно Ñебе пÑедÑÑавиÑÑ: еÑли ÑÑоÑÐ¾Ð½Ñ ÑÑеÑголÑника пеÑеÑиÑÐ»ÐµÐ½Ñ Ð¿ÑоÑив ÑаÑовой ÑÑÑелки , Ñо опÑеделиÑÐµÐ»Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ñелен , инаÑе â оÑÑиÑаÑелен . ÐÐ»Ñ ÑеÑÑаÑдÑа знак бÑÐ´ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ Ñого, в каком поÑÑдке (по ÑаÑовой ÑÑÑелке или пÑоÑив) пеÑвÑе 3 ÑоÑки бÑдÑÑ Ð¿ÐµÑеÑиÑлÑÑÑÑÑ Ð¿Ñи взглÑде на Ð½Ð¸Ñ Ð¸Ð· поÑледней. Таким обÑазом, в далÑнейÑем, пÑи задании геомеÑÑиÑеÑÐºÐ¸Ñ Ð¾Ð±ÑекÑов, Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑинÑÑÑ, ÑÑо поÑÑдок пеÑеÑиÑÐ»ÐµÐ½Ð¸Ñ ÑоÑек должен бÑÑÑ ÑикÑиÑованнÑм.
ÐножиÑÐµÐ»Ñ Ð¿ÐµÑед деÑеÑминанÑом Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ опÑÑÑиÑÑ, Ñак как в алгоÑиÑме бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð»Ð¸ÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ знаке велиÑÐ¸Ð½Ñ Ð¾ÑиенÑиÑованного гипеÑобÑÑма.
ÐеÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ Ñавен нÑлÑ, еÑли Ñ Ð¾ÑÑ Ð±Ñ Ð´Ð²Ðµ ÑÑÑоки линейно завиÑÐ¸Ð¼Ñ (помним, ÑÑо ÑоÑки попаÑно ÑазлиÑнÑ, Ñо еÑÑÑ Ð½Ð¸ одна ÑÑÑока не нÑлеваÑ). ÐеÑложно пÑовеÑиÑÑ ÑооÑвеÑÑÑвие пÑиведÑннÑÑ Ð²ÑÑе ÑаÑÑÑждений об аÑÑинно завиÑимÑÑ ÑоÑÐºÐ°Ñ Ð¸ линейно завиÑимÑÑ Ð²ÐµÐºÑоÑÐ°Ñ , ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ Ð¸Ð¼.
Ðа абÑолÑÑное знаÑение деÑеÑминанÑа не бÑÐ´ÐµÑ Ð²Ð»Ð¸ÑÑÑ Ñо, какÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ÑоÑÐºÑ Ð²ÑÑиÑаем пÑи пеÑÐµÑ Ð¾Ð´Ðµ к векÑоÑам, â ÑолÑко на знак. СледÑÐµÑ Ð²ÑÑиÑаÑÑ Ð²Ñегда поÑледнÑÑ ÑоÑÐºÑ Ð¸Ð· пеÑвÑÑ , инаÑе Ð´Ð»Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾ оÑиенÑиÑованнÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑÑ Ð¾Ð±ÑекÑов, иÑполÑзÑемÑÑ Ð² далÑнейÑем, знак меÑÑ Ð±ÑÐ´ÐµÑ ÑазнÑм в ÑÑÑнÑÑ Ð¸ неÑÑÑнÑÑ ÑазмеÑноÑÑÑÑ .
ЧÑо же делаÑÑ Ñ Ð¼ÐµÑой обÑекÑов, вложеннÑÑ Ð² пÑоÑÑÑанÑÑво ÑлиÑком болÑÑой ÑазмеÑноÑÑи, напÑимеÑ, Ñ Ð¼ÐµÑой гÑаней? ÐÑли Ð¼Ñ ÑконÑÑÑÑиÑÑем маÑÑиÑÑ Ñак же, как ÑÑо показано вÑÑе, Ñо она бÑÐ´ÐµÑ Ð¿ÑÑмоÑголÑнаÑ. ÐеÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ Ð¾Ñ Ñакой маÑÑиÑÑ Ð²Ð·ÑÑÑ Ð½Ðµ полÑÑиÑÑÑ. ÐказÑваеÑÑÑ ÑоÑмÑÐ»Ñ Ð¼Ð¾Ð¶Ð½Ð¾ обобÑиÑÑ (ÑÑо обобÑение ÑвÑзано Ñ ÑоÑмÑлой Ðине-ÐоÑи), иÑполÑзÑÑ Ð²ÑÑ ÑÑ Ð¶Ðµ маÑÑиÑÑ ÑоÑÑавленнÑÑ Ð¸Ð· векÑоÑов-ÑÑÑок:
ÐÐ»Ñ Ð°ÑÑинно незавиÑимÑÑ Ð¿Ð¾Ð¿Ð°Ñно ÑазлиÑнÑÑ ÑоÑек маÑÑиÑа под деÑеÑминанÑом вÑегда полÑÑаеÑÑÑ ÐºÐ²Ð°Ð´ÑаÑной положиÑелÑно опÑеделÑнной, а Ñам деÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ Ñакой маÑÑиÑÑ â ÑиÑло вÑегда положиÑелÑное. ÐÐ»Ñ Ð°ÑÑинно завиÑимÑÑ ÑоÑек маÑÑиÑа полÑÑиÑÑÑ ÑингÑлÑÑной (Ñ.е. ÐµÑ Ð¾Ð¿ÑеделиÑÐµÐ»Ñ Ñавен нÑлÑ). ЯÑно, ÑÑо меÑа вÑегда неоÑÑиÑаÑелÑÐ½Ð°Ñ Ð¸ инÑоÑмаÑии об оÑиенÑаÑии Ð¼Ñ Ð½Ðµ имеем.
С одной ÑÑоÑонÑ, деÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ Ð¿ÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ²Ð°Ð´ÑаÑнÑÑ Ð¼Ð°ÑÑÐ¸Ñ Ñавен пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð´ÐµÑеÑминанÑов, Ñ Ð´ÑÑгой â деÑеÑÐ¼Ð¸Ð½Ð°Ð½Ñ ÑÑанÑпониÑованной квадÑаÑной маÑÑиÑÑ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð´ÐµÑеÑминанÑом иÑÑ Ð¾Ð´Ð½Ð¾Ð¹, Ñаким обÑазом поÑледнÑÑ ÑоÑмÑла ÑводиÑÑÑ Ðº ÑоÑмÑле Ð´Ð»Ñ ÑоÑки, за иÑклÑÑением коÑÐ½Ñ Ð¸Ð· квадÑаÑа, Ñ.е. модÑлÑ, коÑоÑÑй Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ опÑÑÑиÑÑ, Ñ ÑелÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± оÑноÑиÑелÑной оÑиенÑаÑии ÑоÑек в пÑоÑÑÑанÑÑве.
ÐлгоÑиÑм.
Сам алгоÑиÑм Quickhull Ð´Ð»Ñ ÑлÑÑÐ°Ñ Ð¿ÑоизволÑной ÑазмеÑноÑÑи бÑл пÑедложен в ÑÑÑде Barber, C. Bradford; Dobkin, David P.; Huhdanpaa, Hannu (1 December 1996). «The quickhull algorithm for convex hulls». ACM Transactions on Mathematical Software 22 (4): 469â483. «ÐанониÑеÑкаÑ» ÑеализаÑÐ¸Ñ Ð½Ð° C Ð¾Ñ Ð°Ð²ÑоÑов ÑаÑполагаеÑÑÑ Ð½Ð° Ñже ÑпомÑнÑÑом ÑайÑе http://qhull.org/, ÑепозиÑоÑий Ñ C++ инÑеÑÑейÑом https://gitorious.org/qhull/qhull. ÐÑоÑиÑиÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑм из пеÑвоиÑÑоÑника:
create a simplex of d + 1 points for each facet F for each unassigned point p if p is above F assign p to F`s outside set for each facet F with a non-empty outside set select the furthest point p of F`s outside set initialize the visible set V to F for all unvisited neighbours N of facets in V if p is above N add N to V the set of horizon ridges H is the boundary of V for each ridge R in H create a new facet from R and P link the new facet to its neighbours for each new facet F' for each unassigned point q in an outside set of a facet in V if q is above F' assign q to F'`s outside set delete the facets in V
ÐÑпÑÐºÐ»Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка пÑедÑÑавлÑÐµÑ Ñобой ÑпиÑок гÑаней.
СÑаÑÑовÑй ÑимплекÑ.
Ðак видно, Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð½Ð°ÑаÑÑ Ñ Ð½ÐµÐºÐ¾ÑоÑого ÑÑаÑÑового ÑимплекÑа. ÐÐ»Ñ ÑÑого можно вÑбÑаÑÑ Ð»ÑбÑе аÑÑинно незавиÑимÑе ÑоÑки, но лÑÑÑе иÑполÑзоваÑÑ ÐºÐ°ÐºÑÑ-нибÑÐ´Ñ Ð´ÐµÑÑвÑÑ ÑвÑиÑÑикÑ. ÐÑновное ÑÑебование на ÑÑом Ñаге â ÑÑÐ¾Ð±Ñ Ð½Ð°Ñ ÑÐ¸Ð¼Ð¿Ð»ÐµÐºÑ Ð¿Ð¾ возможноÑÑи не полÑÑилÑÑ Â«Ñзким» (англ. narrow). ÐÑо важно в ÑлÑÑае, еÑли иÑполÑзÑеÑÑÑ Ð°ÑиÑмеÑика Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой (англ. floating-point arithmetic). РоÑигиналÑной ÑеализаÑии иÑполÑзÑÑÑÑÑ ÑоÑки Ñ Ð¼Ð°ÐºÑималÑнÑми и минималÑнÑми знаÑениÑми кооÑÐ´Ð¸Ð½Ð°Ñ (оÑевидно, они же войдÑÑ Ð²Ð¾ множеÑÑво веÑÑин вÑпÑклой оболоÑки). ÐаÑав Ñо ÑÑаÑÑового ÑимплекÑа, на каждом поÑледÑÑÑем Ñаге Ð¼Ñ Ð±Ñдем полÑÑаÑÑ Ð²ÑÑ Ð±Ð¾Ð»ÑÑий и болÑÑий многогÑанник, неизменнÑм ÑвойÑÑвом коÑоÑого вÑегда бÑÐ´ÐµÑ ÐµÐ³Ð¾ вÑпÑклоÑÑÑ. Я бÑÐ´Ñ Ð½Ð°Ð·ÑваÑÑ ÐµÐ³Ð¾ вÑеменнÑй многогÑанник.
ÐвÑиÑÑика поиÑка веÑÑин Ð´Ð»Ñ ÑÑаÑÑового ÑимплекÑа.
ÐÐ¾Ñ ÑвÑиÑÑика оÑнована на поÑледоваÑелÑном вÑбоÑе ÑоÑек Ñаким обÑазом, ÑÑÐ¾Ð±Ñ ÐºÐ°Ð¶Ð´Ð°Ñ ÑледÑÑÑÐ°Ñ Ð½Ð°Ñ
одилаÑÑ Ð¾Ñ Ð²ÑеÑ
пÑедÑдÑÑиÑ
как можно далÑÑе. «ÐалÑÑе» â в некоÑоÑом опÑеделÑнном ÑмÑÑле, коÑоÑÑй пÑоÑÑÐ½Ñ Ð´Ð°Ð»ÐµÐµ.
ÐедÑÑÑÑ Ð´Ð²Ð° ÑпиÑка ÑоÑек: иÑÑ Ð¾Ð´Ð½Ñй ÑпиÑок (изнаÑалÑно в нÑм Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð²Ñе ÑоÑки Ñо Ð²Ñ Ð¾Ð´Ð° алгоÑиÑма) и ÑпиÑок ÑоÑек ÑимплекÑа (изнаÑалÑно â пÑÑÑой). Ð ÑооÑвеÑÑÑвие множеÑÑвам и можно поÑÑавиÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑва векÑоÑов и . ÐÐ»Ñ ÑÑого Ð¼Ñ Ð¼ÑÑленно на каждом Ñаге данного алгоÑиÑма вÑбиÑаем лÑбÑÑ ÑоÑÐºÑ Ð¸Ð· множеÑÑва (д.б. не пÑÑÑое), запоминаем еÑ, а заÑем пÑоводим из Ð½ÐµÑ Ð²ÐµÐºÑоÑа во вÑе оÑÑалÑнÑе ÑоÑки из (полÑÑÐ°Ñ Ð¿Ñи ÑÑом , коÑоÑое бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¼ÐµÐ½ÑÑе на один ÑлеменÑ, Ñем ) и во вÑе ÑоÑки из (полÑÑÐ°Ñ ). Ðа пеÑвом Ñаге беÑÑм пеÑвÑÑ (или лÑбÑÑ Ð´ÑÑгÑÑ) ÑоÑÐºÑ Ð¸Ð· и пеÑемеÑаем ÐµÑ Ð² . Ðалее иÑем векÑÐ¾Ñ Ð¸Ð· Ñ ÑамÑм болÑÑим модÑлем и пеÑемеÑаем ÑооÑвеÑÑÑвеннÑÑ ÑоÑÐºÑ Ð¸Ð· в . ÐеÑвÑÑ Ð¶Ðµ ÑоÑÐºÑ Ð¸Ð· пеÑемеÑаем обÑаÑно в (она бÑла вÑбÑана без какого-либо кÑиÑеÑиÑ). Ðа каждом из ÑледÑÑÑÐ¸Ñ Ñагов иÑем ÑоÑÐºÑ Ð¸Ð· , коÑоÑÐ°Ñ Ð¼Ð°ÐºÑималÑно далека Ð¾Ñ Ð°ÑÑинного пÑоÑÑÑанÑÑва Ñ Ð±Ð°Ð·Ð¸Ñом и пеÑемеÑаем ÐµÑ Ð¸Ð· в . ÐÐ»Ñ ÑÑого иÑем ÑооÑвеÑÑÑвÑÑÑий ÑоÑке векÑÐ¾Ñ Ð¸Ð· , модÑÐ»Ñ Ð¿ÑоекÑии коÑоÑого на оÑÑогоналÑное дополнение векÑоÑного подпÑоÑÑÑанÑÑва макÑимален. ÐдеÑÑ â Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка , Ñо еÑÑÑ â векÑоÑное пÑоÑÑÑанÑÑво, Ñ.к. векÑоÑа в полÑÑаÑÑÑÑ Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾ незавиÑимÑми (по поÑÑÑоениÑ), Ñо â Ð±Ð°Ð·Ð¸Ñ ÑÑого векÑоÑного пÑоÑÑÑанÑÑва.
ФоÑмÑла ÑаÑÑÑоÑÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ :
Так как векÑÐ¾Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑаÑкладÑваеÑÑÑ Ð² ÑÑÐ¼Ð¼Ñ Ð¿ÑоекÑий на лÑбое подпÑоÑÑÑанÑÑво и на оÑÑогоналÑное дополнение ÑÑого подпÑоÑÑÑанÑÑва, Ñо:
ÐÐ¼ÐµÑ Ð¾ÑÑоноÑмиÑованнÑй Ð±Ð°Ð·Ð¸Ñ Ð²ÐµÐºÑоÑного подпÑоÑÑÑанÑÑва , Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ вÑÑиÑлиÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑоекÑии на оÑÑогоналÑное дополнение ÑÑого подпÑоÑÑÑанÑÑва:
ÐооÑдинаÑÑ Ð²ÐµÐºÑоÑов Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ полÑÑиÑÑ, пÑÐ¾Ð¸Ð·Ð²ÐµÐ´Ñ QR-Ñазложение пÑÑмоÑголÑной маÑÑиÑÑ (напÑимеÑ, меÑодом ХаÑÑÑ Ð¾Ð»Ð´ÐµÑа), ÑоÑÑавленной из (кооÑдинаÑ) ÑÑолбÑов-векÑоÑов из множеÑÑва . Ð ÑезÑлÑÑаÑе Ð¼Ñ Ð¿Ð¾Ð»ÑÑим оÑÑогоналÑнÑÑ (пÑÑмоÑголÑнÑÑ) маÑÑиÑÑ Q () и веÑÑ Ð½ÐµÑÑеÑголÑнÑÑ R (не иÑполÑзÑеÑÑÑ). СÑолбÑÑ Q â ÑÑо кооÑдинаÑÑ Ð²ÐµÐºÑоÑов , обÑазÑÑÑÐ¸Ñ Ð¾ÑÑоноÑмиÑованнÑй Ð±Ð°Ð·Ð¸Ñ Ð²ÐµÐºÑоÑного пÑоÑÑÑанÑÑва .
ÐоÑле завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ð°Ð»Ð³Ð¾ÑиÑма в Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ ÑоÑка.
ÐедÑÑÑÑ Ð´Ð²Ð° ÑпиÑка ÑоÑек: иÑÑ Ð¾Ð´Ð½Ñй ÑпиÑок (изнаÑалÑно в нÑм Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ Ð²Ñе ÑоÑки Ñо Ð²Ñ Ð¾Ð´Ð° алгоÑиÑма) и ÑпиÑок ÑоÑек ÑимплекÑа (изнаÑалÑно â пÑÑÑой). Ð ÑооÑвеÑÑÑвие множеÑÑвам и можно поÑÑавиÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑва векÑоÑов и . ÐÐ»Ñ ÑÑого Ð¼Ñ Ð¼ÑÑленно на каждом Ñаге данного алгоÑиÑма вÑбиÑаем лÑбÑÑ ÑоÑÐºÑ Ð¸Ð· множеÑÑва (д.б. не пÑÑÑое), запоминаем еÑ, а заÑем пÑоводим из Ð½ÐµÑ Ð²ÐµÐºÑоÑа во вÑе оÑÑалÑнÑе ÑоÑки из (полÑÑÐ°Ñ Ð¿Ñи ÑÑом , коÑоÑое бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ð¼ÐµÐ½ÑÑе на один ÑлеменÑ, Ñем ) и во вÑе ÑоÑки из (полÑÑÐ°Ñ ). Ðа пеÑвом Ñаге беÑÑм пеÑвÑÑ (или лÑбÑÑ Ð´ÑÑгÑÑ) ÑоÑÐºÑ Ð¸Ð· и пеÑемеÑаем ÐµÑ Ð² . Ðалее иÑем векÑÐ¾Ñ Ð¸Ð· Ñ ÑамÑм болÑÑим модÑлем и пеÑемеÑаем ÑооÑвеÑÑÑвеннÑÑ ÑоÑÐºÑ Ð¸Ð· в . ÐеÑвÑÑ Ð¶Ðµ ÑоÑÐºÑ Ð¸Ð· пеÑемеÑаем обÑаÑно в (она бÑла вÑбÑана без какого-либо кÑиÑеÑиÑ). Ðа каждом из ÑледÑÑÑÐ¸Ñ Ñагов иÑем ÑоÑÐºÑ Ð¸Ð· , коÑоÑÐ°Ñ Ð¼Ð°ÐºÑималÑно далека Ð¾Ñ Ð°ÑÑинного пÑоÑÑÑанÑÑва Ñ Ð±Ð°Ð·Ð¸Ñом и пеÑемеÑаем ÐµÑ Ð¸Ð· в . ÐÐ»Ñ ÑÑого иÑем ÑооÑвеÑÑÑвÑÑÑий ÑоÑке векÑÐ¾Ñ Ð¸Ð· , модÑÐ»Ñ Ð¿ÑоекÑии коÑоÑого на оÑÑогоналÑное дополнение векÑоÑного подпÑоÑÑÑанÑÑва макÑимален. ÐдеÑÑ â Ð»Ð¸Ð½ÐµÐ¹Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка , Ñо еÑÑÑ â векÑоÑное пÑоÑÑÑанÑÑво, Ñ.к. векÑоÑа в полÑÑаÑÑÑÑ Ð»Ð¸Ð½ÐµÐ¹Ð½Ð¾ незавиÑимÑми (по поÑÑÑоениÑ), Ñо â Ð±Ð°Ð·Ð¸Ñ ÑÑого векÑоÑного пÑоÑÑÑанÑÑва.
ФоÑмÑла ÑаÑÑÑоÑÐ½Ð¸Ñ Ð¾Ñ Ð´Ð¾ :
Так как векÑÐ¾Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно ÑаÑкладÑваеÑÑÑ Ð² ÑÑÐ¼Ð¼Ñ Ð¿ÑоекÑий на лÑбое подпÑоÑÑÑанÑÑво и на оÑÑогоналÑное дополнение ÑÑого подпÑоÑÑÑанÑÑва, Ñо:
ÐÐ¼ÐµÑ Ð¾ÑÑоноÑмиÑованнÑй Ð±Ð°Ð·Ð¸Ñ Ð²ÐµÐºÑоÑного подпÑоÑÑÑанÑÑва , Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ вÑÑиÑлиÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑоекÑии на оÑÑогоналÑное дополнение ÑÑого подпÑоÑÑÑанÑÑва:
ÐооÑдинаÑÑ Ð²ÐµÐºÑоÑов Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ полÑÑиÑÑ, пÑÐ¾Ð¸Ð·Ð²ÐµÐ´Ñ QR-Ñазложение пÑÑмоÑголÑной маÑÑиÑÑ (напÑимеÑ, меÑодом ХаÑÑÑ Ð¾Ð»Ð´ÐµÑа), ÑоÑÑавленной из (кооÑдинаÑ) ÑÑолбÑов-векÑоÑов из множеÑÑва . Ð ÑезÑлÑÑаÑе Ð¼Ñ Ð¿Ð¾Ð»ÑÑим оÑÑогоналÑнÑÑ (пÑÑмоÑголÑнÑÑ) маÑÑиÑÑ Q () и веÑÑ Ð½ÐµÑÑеÑголÑнÑÑ R (не иÑполÑзÑеÑÑÑ). СÑолбÑÑ Q â ÑÑо кооÑдинаÑÑ Ð²ÐµÐºÑоÑов , обÑазÑÑÑÐ¸Ñ Ð¾ÑÑоноÑмиÑованнÑй Ð±Ð°Ð·Ð¸Ñ Ð²ÐµÐºÑоÑного пÑоÑÑÑанÑÑва .
ÐоÑле завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ Ð°Ð»Ð³Ð¾ÑиÑма в Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ ÑоÑка.
Ðалее Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑаÑпÑеделиÑÑ Ð¾ÑÑавÑиеÑÑ ÑоÑки в Ñак назÑваемÑе ÑпиÑки внеÑÐ½Ð¸Ñ ÑоÑек (англ. outside sets) гÑаней â ÑÑо Ñакие ÑпиÑки ÑоÑек, коÑоÑÑе ведÑÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ гÑани и в коÑоÑÑе попадаÑÑ ÐµÑÑ Ð½Ðµ ÑаÑÑмоÑÑеннÑе (далее â неназнаÑеннÑе, англ. unassigned) ÑоÑки, Ð½Ð°Ñ Ð¾Ð´ÑÑиеÑÑ Ð¾ÑноÑиÑелÑно плоÑкоÑÑи гÑани по дÑÑгÑÑ ÑÑоÑонÑ, нежели внÑÑÑенноÑÑÑ ÑимплекÑа (или вÑеменного многогÑанника в далÑнейÑем). ÐдеÑÑ Ð¼Ñ Ð¿Ð¾Ð»ÑзÑемÑÑ Ñем ÑвойÑÑвом вÑпÑклого многогÑанника (и ÑимплекÑа в ÑаÑÑноÑÑи), ÑÑо веÑÑ Ð¾Ð½ Ð»ÐµÐ¶Ð¸Ñ Ñеликом ÑолÑко в одном из двÑÑ Ð¿Ð¾Ð»ÑпÑоÑÑÑанÑÑв, полÑÑаемÑÑ Ð¿Ñи Ñазбиении вÑего пÑоÑÑÑанÑÑва плоÑкоÑÑÑÑ Ð»Ñбой гÑани. Ðз ÑÑого ÑвойÑÑва ÑледÑÐµÑ ÑÐ¾Ñ ÑакÑ, ÑÑо еÑли ÑоÑка не попала ни в один из ÑпиÑков внеÑÐ½Ð¸Ñ ÑоÑек гÑаней вÑпÑклой оболоÑки, Ñо она доÑÑовеÑно Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð²Ð½ÑÑÑи ÑÑой вÑпÑклой оболоÑки. РдалÑнейÑем в алгоÑиÑме понадобиÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñом, ÐºÐ°ÐºÐ°Ñ Ð¸Ð· ÑоÑек, ÑодеÑжаÑÐ¸Ñ ÑÑ Ð² ÑпиÑке внеÑÐ½Ð¸Ñ ÑоÑек, наиболее Ñдалена Ð¾Ñ Ð¿Ð»Ð¾ÑкоÑÑи гÑани, поÑÑомÑ, добавлÑÑ ÑоÑки в ÑпиÑок внеÑÐ½Ð¸Ñ ÑоÑек, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑÐ¾Ñ ÑанÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ Ñом, коÑоÑÐ°Ñ Ð¸Ð· Ð½Ð¸Ñ ÑÐ°Ð¼Ð°Ñ Ð´Ð°Ð»ÑнÑÑ. ÐÑÐ±Ð°Ñ ÑоÑка Ð¿Ð¾Ð¿Ð°Ð´Ð°ÐµÑ ÑолÑко в один ÑпиÑок внеÑÐ½Ð¸Ñ ÑоÑек. Ðа аÑимпÑоÑиÑеÑкÑÑ ÑложноÑÑÑ Ð½Ðµ влиÑÐµÑ Ñо как именно ÑаÑпÑеделÑÑÑÑÑ ÑоÑки по ÑпиÑкам.
Ðа данном ÑÑапе мне Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑделаÑÑ Ð¾ÑÑÑÑпление и ÑаÑÑказаÑÑ Ð¾ Ñом, как задаÑÑ Ð³ÑанÑ, как вÑÑиÑлÑÑÑ ÑаÑÑÑоÑние до неÑ, как опÑеделиÑÑ Ð¾ÑиенÑаÑÐ¸Ñ ÑоÑки оÑноÑиÑелÑно гÑани.
ÐÑанÑ. ÐÑиенÑиÑованное ÑаÑÑÑоÑние Ð¾Ñ Ð¿Ð»Ð¾ÑкоÑÑи гÑани до ÑоÑки.
ÐÐ»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð³Ñани нам необÑ
одимо имеÑÑ ÑоÑек â веÑÑин гÑани. Ðо пÑиведÑннÑм вÑÑе ÑообÑажениÑм Ñ
ÑаниÑÑ Ð¼Ñ ÑÑи ÑоÑки бÑдем ÑпоÑÑдоÑеннÑм обÑазом. ÐÑиÑÑм ÑпоÑÑдоÑенноÑÑÑ Ð½Ð°Ð¼ нÑжна не абÑолÑÑно ÑÑÑогаÑ. ÐапÑимеÑ, ÑовеÑÑив два обмена в лÑбÑÑ
двÑÑ
не обÑзаÑелÑно ÑазлиÑнÑÑ
паÑаÑ
попаÑно ÑазлиÑнÑÑ
ÑоÑек, Ð¼Ñ Ð¿Ð¾Ð»ÑÑим ÑоÑно Ñак же оÑиенÑиÑованнÑÑ Ð³ÑÐ°Ð½Ñ Ð² Ñом ÑмÑÑле, ÑÑо в лÑбÑÑ
опеÑаÑиÑÑ
в далÑнейÑем (а ÑÑо обÑÑно бÑÐ´ÐµÑ Ð²Ð·ÑÑие деÑеÑминанÑов Ð¾Ñ Ð¼Ð°ÑÑиÑ, ÑÑоÑмиÑованнÑÑ
из конÑÑÐ°Ð½Ñ Ð¸ кооÑÐ´Ð¸Ð½Ð°Ñ Ð²ÐµÑÑин) Ñакие паÑнÑе пеÑеÑÑановки не влиÑÑÑ Ð½Ð° ÑезÑлÑÑаÑ. ÐвÑм возможнÑм оÑиенÑаÑиÑм ÑооÑвеÑÑÑвÑÐµÑ Ð´Ð²Ð° возможнÑÑ
напÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ñмали к плоÑкоÑÑи (гÑани).
ТолÑко лиÑÑ ÐµÐ´Ð¸Ð½Ð¾Ð¶Ð´Ñ â в Ñамом наÑале â нам понадобиÑÑÑ Ð²ÑÑиÑлиÑÑ Ð·Ð½Ð°Ñение гипеÑобÑÑма ÑÑаÑÑового ÑимплекÑа, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ Ð·Ð½Ð°ÐºÑ Ð¾Ð¿ÑеделиÑÑ ÐµÐ³Ð¾ оÑиенÑаÑиÑ. ÐÑе далÑнейÑие опеÑаÑии каÑаÑелÑно гÑаней бÑдÑÑ Ð·Ð°ÐºÐ»ÑÑаÑÑÑÑ ÑолÑко лиÑÑ Ð² вÑÑиÑлении оÑиенÑиÑованного ÑаÑÑÑоÑÐ½Ð¸Ñ (англ. directed distance) до ÑоÑки. ÐдеÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ вÑпомниÑÑ ÑколÑнÑÑ ÑоÑмÑлÑ, имеÑÑÑÑ Ð¾Ð±Ð¾Ð±Ñение на ÑлÑÑай пÑоизволÑной ÑазмеÑноÑÑи, а именно: «плоÑÐ°Ð´Ñ ÑÑеÑголÑника Ñавна половине пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ÑÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° вÑÑоÑÑ» или «обÑÑм пиÑÐ°Ð¼Ð¸Ð´Ñ Ñавен одной ÑÑеÑÑей Ð¾Ñ Ð¿ÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð»Ð¾Ñади оÑÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° вÑÑоÑÑ». ÐеÑÑ Ñела и гÑани Ð¼Ñ Ð²ÑÑилÑÑÑ Ñмеем, ÑледоваÑелÑно Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ вÑÑазиÑÑ Ð²ÑÑоÑÑ (одномеÑнÑÑ Ð´Ð»Ð¸Ð½Ñ):
РалгоÑиÑме нам понадобиÑÑÑ Ð²ÑÑиÑлÑÑÑ Ð¾ÑиенÑиÑованное ÑаÑÑÑоÑние Ð¾Ñ ÑикÑиÑованной плоÑкоÑÑи (гÑани) до ÑоÑек, коÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾. Ð ÑÑом ÑлÑÑае Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ замеÑиÑÑ, ÑÑо в знаменаÑеле ÑÑÐ¾Ð¸Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑÐ½Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа. ÐÑ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑоÑки («над» или «под») завиÑÐ¸Ñ Ð»Ð¸ÑÑ Ð³Ð¸Ð¿ÐµÑобÑÑм в ÑиÑлиÑеле. â Ñоже конÑÑанÑа. Таким обÑазом Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑаÑÑмаÑÑиваÑÑ ÑолÑко оÑноÑиÑелÑнÑе велиÑÐ¸Ð½Ñ Ð³Ð¸Ð¿ÐµÑобÑÑмов ÑимплекÑов (а ÑоÑнее, ÑооÑвеÑÑÑвеннÑÑ Ð¿Ð°ÑаллелоÑопов) поÑÑÑоеннÑÑ Ð¸Ð· гÑани и ÑоÑки. ÐÑли опÑеделиÑÐµÐ»Ñ ÑÑиÑаÑÑ Ð½Ðµ ÑамÑм медленнÑм ÑпоÑобом (по опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð° ) и не ÑамÑм бÑÑÑÑÑм (), а ÑпоÑобом ÑеÑез LUP-Ñазложение (англ. LUP-decomposition), Ñо можно добиÑÑÑÑ ÑложноÑÑи и пÑилиÑной ÑиÑленной ÑÑÑойÑивоÑÑи (англ. numerical stability). Ðе беÑÑÑÑ Ð¾ÑениваÑÑ Ñо, как ÑложноÑÑÑ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð´ÐµÑеÑминанÑа влиÑÐµÑ Ð½Ð° конеÑнÑÑ ÑложноÑÑÑ Ð²Ñего алгоÑиÑма, но ÑкÑпеÑименÑиÑÑÑ Ñ Ð·Ð°ÐºÐ»ÑÑил, ÑÑо в Ñ ÑдÑем ÑлÑÑае (напÑимеÑ, ÑлÑÑай ÑоÑек ÑаÑположеннÑÑ Ð½Ð° ÑÑеÑе (англ. cospherical points)) даже пÑи малÑÑ ÑазмеÑноÑÑÑÑ Ð¿ÑоÑÑÑанÑÑва () вÑÑиÑление деÑеÑминанÑов Ð´Ð»Ñ Ð¾Ñенки ÑаÑÑÑоÑÐ½Ð¸Ñ ÑлиÑком вÑÑиÑлиÑелÑно заÑÑаÑно.
ÐÑÑгой Ð¿Ð¾Ð´Ñ Ð¾Ð´ â ÑÑо иÑполÑзование ноÑмиÑованного ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ð»Ð¾ÑкоÑÑи (англ. hyperplane equation). ÐÑо ÑÑавнение пеÑвой ÑÑепени, коÑоÑое ÑвÑзÑÐ²Ð°ÐµÑ ÐºÐ¾Ð¾ÑдинаÑÑ ÑоÑки плоÑкоÑÑи, кооÑдинаÑÑ Ð½Ð¾ÑмиÑованного векÑоÑа ноÑмали ( â неноÑмиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð½Ð¾ÑмалÑ) к плоÑкоÑÑи (англ. normalized normal vector) и ÐµÑ ÑмеÑÐµÐ½Ð¸Ñ Ð¾Ñ Ð½Ð°Ñала кооÑÐ´Ð¸Ð½Ð°Ñ (англ. offset):
ÐооÑдинаÑÑ Ð½Ð¾Ñмали :
ÐелиÑина â ÑмеÑение плоÑкоÑÑи Ð¾Ñ Ð½Ð°Ñала кооÑдинаÑ:
ÐевÑзка , полÑÑÐ°ÐµÐ¼Ð°Ñ Ð¿Ñи подÑÑановке пÑоизволÑной ÑоÑки в ноÑмиÑованное ÑÑавнение плоÑкоÑÑи, â ÑÑо как Ñаз оÑиенÑиÑованное ÑаÑÑÑоÑние Ð¾Ñ Ð¿Ð»Ð¾ÑкоÑÑи до ÑоÑки:
ÐÑли ÑоÑка Ð»ÐµÐ¶Ð¸Ñ Ð¿Ð¾ ÑÑ Ð¶Ðµ ÑÑоÑÐ¾Ð½Ñ Ð¾Ñ Ð¿Ð»Ð¾ÑкоÑÑи, кÑда напÑавлена ноÑмалÑ, Ñо велиÑина бÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑной, инаÑе â оÑÑиÑаÑелÑной.
ÐÑлиÑие маÑÑиÑÑ Ð¿Ð¾Ð´ деÑеÑминанÑом в вÑÑажениÑÑ Ð´Ð»Ñ Ð¸ ÑолÑко лиÑÑ Ð² замене -ой кооÑдинаÑÑ (ÑÑолбÑа) на единиÑÑ.
Таким обÑазом Ð´Ð»Ñ Ð¿Ð»Ð¾ÑкоÑÑи гÑани Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑÑиÑлиÑÑ Ð¸ Ñ ÑаниÑÑ ÑиÑло: кооÑÐ´Ð¸Ð½Ð°Ñ Ð½Ð¾ÑмиÑованной ноÑмали и ÑмеÑение Ð¾Ñ Ð½Ð°Ñала кооÑдинаÑ. ÐÑÑиÑление ÑаÑÑÑоÑÐ½Ð¸Ñ ÑводиÑÑÑ Ðº вÑÐ·Ð¾Ð²Ñ ÑÑнкÑии std::inner_product, в коÑоÑÑÑ Ð¿ÐµÑедаÑÑÑÑ Ð¸ÑеÑаÑоÑÑ Ð½Ð°Ñала и конÑа маÑÑива кооÑÐ´Ð¸Ð½Ð°Ñ Ð½Ð¾ÑмиÑованной ноÑмали, наÑало маÑÑива кооÑÐ´Ð¸Ð½Ð°Ñ ÑоÑки, а поÑледним паÑамеÑÑом â знаÑение . Так как везде далее в алгоÑиÑме иÑполÑзÑÑÑÑÑ Ð»Ð¸ÑÑ Ð¾ÑноÑиÑелÑнÑе знаÑÐµÐ½Ð¸Ñ ÑаÑÑÑоÑний, Ñо, вообÑе говоÑÑ, можно и не ноÑмиÑоваÑÑ, но ÑÑо доволÑно деÑÑÐ²Ð°Ñ Ð¾Ð¿ÐµÑаÑиÑ, а пÑавилÑное знаÑение ÑаÑÑÑоÑÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¸ пÑи ÑабоÑе Ñ Ð²ÑпÑклой оболоÑкой поÑле дейÑÑвий алгоÑиÑма.
ТолÑко лиÑÑ ÐµÐ´Ð¸Ð½Ð¾Ð¶Ð´Ñ â в Ñамом наÑале â нам понадобиÑÑÑ Ð²ÑÑиÑлиÑÑ Ð·Ð½Ð°Ñение гипеÑобÑÑма ÑÑаÑÑового ÑимплекÑа, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ Ð·Ð½Ð°ÐºÑ Ð¾Ð¿ÑеделиÑÑ ÐµÐ³Ð¾ оÑиенÑаÑиÑ. ÐÑе далÑнейÑие опеÑаÑии каÑаÑелÑно гÑаней бÑдÑÑ Ð·Ð°ÐºÐ»ÑÑаÑÑÑÑ ÑолÑко лиÑÑ Ð² вÑÑиÑлении оÑиенÑиÑованного ÑаÑÑÑоÑÐ½Ð¸Ñ (англ. directed distance) до ÑоÑки. ÐдеÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ вÑпомниÑÑ ÑколÑнÑÑ ÑоÑмÑлÑ, имеÑÑÑÑ Ð¾Ð±Ð¾Ð±Ñение на ÑлÑÑай пÑоизволÑной ÑазмеÑноÑÑи, а именно: «плоÑÐ°Ð´Ñ ÑÑеÑголÑника Ñавна половине пÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ÑÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° вÑÑоÑÑ» или «обÑÑм пиÑÐ°Ð¼Ð¸Ð´Ñ Ñавен одной ÑÑеÑÑей Ð¾Ñ Ð¿ÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð»Ð¾Ñади оÑÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° вÑÑоÑÑ». ÐеÑÑ Ñела и гÑани Ð¼Ñ Ð²ÑÑилÑÑÑ Ñмеем, ÑледоваÑелÑно Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ вÑÑазиÑÑ Ð²ÑÑоÑÑ (одномеÑнÑÑ Ð´Ð»Ð¸Ð½Ñ):
РалгоÑиÑме нам понадобиÑÑÑ Ð²ÑÑиÑлÑÑÑ Ð¾ÑиенÑиÑованное ÑаÑÑÑоÑние Ð¾Ñ ÑикÑиÑованной плоÑкоÑÑи (гÑани) до ÑоÑек, коÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾. Ð ÑÑом ÑлÑÑае Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ замеÑиÑÑ, ÑÑо в знаменаÑеле ÑÑÐ¾Ð¸Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑÐ½Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа. ÐÑ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑоÑки («над» или «под») завиÑÐ¸Ñ Ð»Ð¸ÑÑ Ð³Ð¸Ð¿ÐµÑобÑÑм в ÑиÑлиÑеле. â Ñоже конÑÑанÑа. Таким обÑазом Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑаÑÑмаÑÑиваÑÑ ÑолÑко оÑноÑиÑелÑнÑе велиÑÐ¸Ð½Ñ Ð³Ð¸Ð¿ÐµÑобÑÑмов ÑимплекÑов (а ÑоÑнее, ÑооÑвеÑÑÑвеннÑÑ Ð¿Ð°ÑаллелоÑопов) поÑÑÑоеннÑÑ Ð¸Ð· гÑани и ÑоÑки. ÐÑли опÑеделиÑÐµÐ»Ñ ÑÑиÑаÑÑ Ð½Ðµ ÑамÑм медленнÑм ÑпоÑобом (по опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð° ) и не ÑамÑм бÑÑÑÑÑм (), а ÑпоÑобом ÑеÑез LUP-Ñазложение (англ. LUP-decomposition), Ñо можно добиÑÑÑÑ ÑложноÑÑи и пÑилиÑной ÑиÑленной ÑÑÑойÑивоÑÑи (англ. numerical stability). Ðе беÑÑÑÑ Ð¾ÑениваÑÑ Ñо, как ÑложноÑÑÑ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð´ÐµÑеÑминанÑа влиÑÐµÑ Ð½Ð° конеÑнÑÑ ÑложноÑÑÑ Ð²Ñего алгоÑиÑма, но ÑкÑпеÑименÑиÑÑÑ Ñ Ð·Ð°ÐºÐ»ÑÑил, ÑÑо в Ñ ÑдÑем ÑлÑÑае (напÑимеÑ, ÑлÑÑай ÑоÑек ÑаÑположеннÑÑ Ð½Ð° ÑÑеÑе (англ. cospherical points)) даже пÑи малÑÑ ÑазмеÑноÑÑÑÑ Ð¿ÑоÑÑÑанÑÑва () вÑÑиÑление деÑеÑминанÑов Ð´Ð»Ñ Ð¾Ñенки ÑаÑÑÑоÑÐ½Ð¸Ñ ÑлиÑком вÑÑиÑлиÑелÑно заÑÑаÑно.
ÐÑÑгой Ð¿Ð¾Ð´Ñ Ð¾Ð´ â ÑÑо иÑполÑзование ноÑмиÑованного ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ð»Ð¾ÑкоÑÑи (англ. hyperplane equation). ÐÑо ÑÑавнение пеÑвой ÑÑепени, коÑоÑое ÑвÑзÑÐ²Ð°ÐµÑ ÐºÐ¾Ð¾ÑдинаÑÑ ÑоÑки плоÑкоÑÑи, кооÑдинаÑÑ Ð½Ð¾ÑмиÑованного векÑоÑа ноÑмали ( â неноÑмиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð½Ð¾ÑмалÑ) к плоÑкоÑÑи (англ. normalized normal vector) и ÐµÑ ÑмеÑÐµÐ½Ð¸Ñ Ð¾Ñ Ð½Ð°Ñала кооÑÐ´Ð¸Ð½Ð°Ñ (англ. offset):
ÐооÑдинаÑÑ Ð½Ð¾Ñмали :
ÐелиÑина â ÑмеÑение плоÑкоÑÑи Ð¾Ñ Ð½Ð°Ñала кооÑдинаÑ:
ÐевÑзка , полÑÑÐ°ÐµÐ¼Ð°Ñ Ð¿Ñи подÑÑановке пÑоизволÑной ÑоÑки в ноÑмиÑованное ÑÑавнение плоÑкоÑÑи, â ÑÑо как Ñаз оÑиенÑиÑованное ÑаÑÑÑоÑние Ð¾Ñ Ð¿Ð»Ð¾ÑкоÑÑи до ÑоÑки:
ÐÑли ÑоÑка Ð»ÐµÐ¶Ð¸Ñ Ð¿Ð¾ ÑÑ Ð¶Ðµ ÑÑоÑÐ¾Ð½Ñ Ð¾Ñ Ð¿Ð»Ð¾ÑкоÑÑи, кÑда напÑавлена ноÑмалÑ, Ñо велиÑина бÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑной, инаÑе â оÑÑиÑаÑелÑной.
ÐÑлиÑие маÑÑиÑÑ Ð¿Ð¾Ð´ деÑеÑминанÑом в вÑÑажениÑÑ Ð´Ð»Ñ Ð¸ ÑолÑко лиÑÑ Ð² замене -ой кооÑдинаÑÑ (ÑÑолбÑа) на единиÑÑ.
Таким обÑазом Ð´Ð»Ñ Ð¿Ð»Ð¾ÑкоÑÑи гÑани Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑÑиÑлиÑÑ Ð¸ Ñ ÑаниÑÑ ÑиÑло: кооÑÐ´Ð¸Ð½Ð°Ñ Ð½Ð¾ÑмиÑованной ноÑмали и ÑмеÑение Ð¾Ñ Ð½Ð°Ñала кооÑдинаÑ. ÐÑÑиÑление ÑаÑÑÑоÑÐ½Ð¸Ñ ÑводиÑÑÑ Ðº вÑÐ·Ð¾Ð²Ñ ÑÑнкÑии std::inner_product, в коÑоÑÑÑ Ð¿ÐµÑедаÑÑÑÑ Ð¸ÑеÑаÑоÑÑ Ð½Ð°Ñала и конÑа маÑÑива кооÑÐ´Ð¸Ð½Ð°Ñ Ð½Ð¾ÑмиÑованной ноÑмали, наÑало маÑÑива кооÑÐ´Ð¸Ð½Ð°Ñ ÑоÑки, а поÑледним паÑамеÑÑом â знаÑение . Так как везде далее в алгоÑиÑме иÑполÑзÑÑÑÑÑ Ð»Ð¸ÑÑ Ð¾ÑноÑиÑелÑнÑе знаÑÐµÐ½Ð¸Ñ ÑаÑÑÑоÑний, Ñо, вообÑе говоÑÑ, можно и не ноÑмиÑоваÑÑ, но ÑÑо доволÑно деÑÑÐ²Ð°Ñ Ð¾Ð¿ÐµÑаÑиÑ, а пÑавилÑное знаÑение ÑаÑÑÑоÑÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¸ пÑи ÑабоÑе Ñ Ð²ÑпÑклой оболоÑкой поÑле дейÑÑвий алгоÑиÑма.
ТепеÑÑ Ð¾Ð¿Ð¸ÑÑваÑÑ Ð¿Ð»Ð¾ÑкоÑÑÑ Ð³Ñани Ð¼Ñ Ñмеем, но оÑÑалаÑÑ Ð¾Ð´Ð½Ð° неÑÑноÑÑÑ: как же вÑбÑаÑÑ Ð¿Ð¾ÑÑдок пеÑеÑиÑÐ»ÐµÐ½Ð¸Ñ ÑоÑек в ÑпиÑÐºÐ°Ñ Ð²ÐµÑÑин гÑаней ÑÑаÑÑового ÑимплекÑа? ÐвÑоÑÑ Ð½Ðµ Ñ ÑанÑÑ ÑпиÑок веÑÑин ÑпоÑÑдоÑеннÑм. Ðни поÑÑÑпаÑÑ Ð¸Ð½Ð°Ñе. Ðадав ÑÑавнение плоÑкоÑÑи Ð´Ð»Ñ Ð¿ÑоизволÑного, но ÑикÑиÑованного поÑÑдка веÑÑин, они вÑÑÑнÑÑÑ Ð¾ÑиенÑаÑÐ¸Ñ ÐºÐ°ÐºÐ¾Ð¹-либо внÑÑÑенней ÑоÑки (англ. inner point) оÑноÑиÑелÑно ÑÑой плоÑкоÑÑи. То еÑÑÑ Ð²ÑÑиÑлÑÑÑ Ð¾ÑиенÑиÑованное ÑаÑÑÑоÑние. Ð ÑлÑÑае, еÑли ÑаÑÑÑоÑние оÑÑиÑаÑелÑное они менÑÑÑ Ð·Ð½Ð°Ðº Ñ ÐºÐ¾Ð¾ÑÐ´Ð¸Ð½Ð°Ñ Ð½Ð¾Ñмали к гипеÑплоÑкоÑÑи и Ñ ÐµÑ ÑмеÑÐµÐ½Ð¸Ñ Ð¾Ñ Ð½Ð°Ñала кооÑдинаÑ. Ðибо задаÑÑ Ð·Ð½Ð°Ñение Ñлага, ÑигнализиÑÑÑÑее о Ñом, ÑÑо гÑÐ°Ð½Ñ Ð¿ÐµÑевÑÑнÑÑа (англ. flipped). ÐнÑÑÑенней ÑоÑкой Ð´Ð»Ñ Ð²ÑпÑклого многогÑанника бÑÐ´ÐµÑ ÑÑеднее аÑиÑмеÑиÑеÑкое Ñ Ð¾ÑÑ Ð±Ñ ÐµÐ³Ð¾ веÑÑин (Ñ.н. ÑенÑÑ Ð¼Ð°ÑÑ, еÑли взÑÑÑ Ð²Ñе веÑÑинÑ).
ÐеÑеоÑиенÑаÑÐ¸Ñ Ð³Ñаней ÑÑаÑÑового ÑимплекÑа.
Рмоей ÑеализаÑии на лÑбом ÑÑапе алгоÑиÑма гÑани вÑеменного многогÑанника (а Ñавно и ÑÑаÑÑового ÑимплекÑа и ÑиналÑной вÑпÑклой оболоÑки) оÑиенÑиÑÐ¾Ð²Ð°Ð½Ñ Ð²Ð¾Ð²Ð½Ðµ. ÐÐ»Ñ ÑÑаÑÑового ÑимплекÑа Ñ Ð²ÑÑиÑлÑÑ ÐµÐ³Ð¾ гипеÑобÑÑм, пÑиÑÑм ÑÑÑоки маÑÑиÑÑ Ñ ÑоÑмиÑÑÑ Ð¸Ð· кооÑÐ´Ð¸Ð½Ð°Ñ Ð²ÐµÐºÑоÑов, пÑоведÑннÑÑ
из поÑледней веÑÑÐ¸Ð½Ñ () в пеÑвÑе (). ÐÑли Ñаким обÑазом вÑÑиÑленнÑй гипеÑобÑÑм оÑÑиÑаÑелен, Ñо ÑоÑка наÑ
одиÑÑÑ Â«Ð¿Ð¾Ð´Â» гÑанÑÑ Ñ Ð²ÐµÑÑинами и поÑÑдок ÑоÑек пÑавилÑнÑй, инаÑе Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¾Ð±Ð¼ÐµÐ½ÑÑÑ Ð»ÑбÑе две ÑоÑки меÑÑами (напÑÐ¸Ð¼ÐµÑ Ð¿ÐµÑвÑÑ Ð¸ поÑледнÑÑ). Так как необÑ
одимо пÑоизвеÑÑи обмен двÑÑ
обÑзаÑелÑно ÑазлиÑнÑÑ
ÑоÑек, Ñо Ñакой пÑиÑм не ÑÑабоÑÐ°ÐµÑ Ð´Ð»Ñ ÑлÑÑÐ°Ñ (огÑаниÑение на как Ñаз оÑÑÑда). Ð ÑÑом ÑлÑÑае нÑжно менÑÑÑ Ð·Ð½Ð°Ðº кооÑÐ´Ð¸Ð½Ð°Ñ Ð½Ð¾Ñмали и ÑмеÑениÑ.
ÐеÑÐ²Ð°Ñ Ð³ÑÐ°Ð½Ñ Ð¸ ÑледÑÑÑÐ°Ñ Ð³ÑÐ°Ð½Ñ Ñ Ð²ÐµÑÑинами имеÑÑ Ð¾Ð±Ñее ÑебÑо . ÐÑли мÑÑленно взглÑнÑÑÑ Ð½Ð° ÑÐ¸Ð¼Ð¿Ð»ÐµÐºÑ ÑнаÑÑжи и обойÑи ÑнаÑала пеÑвÑÑ Ð³ÑÐ°Ð½Ñ Ð² поÑÑдке возÑаÑÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑов ÑоÑек, а заÑем Ñак же вÑоÑÑÑ, Ñо обÑее ÑебÑо пÑи ÑÑом бÑÐ´ÐµÑ Ð¿Ñойдено в пÑоÑивоположнÑÑ Ð½Ð°Ð¿ÑавлениÑÑ . СледоваÑелÑно ÑеÑение о Ñом, обмениваÑÑ Ð»Ð¸ меÑÑами две веÑÑÐ¸Ð½Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð¿ÑоÑивоположнÑм аналогиÑÐ½Ð¾Ð¼Ñ ÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑвой гÑани. Ð Ñак далее (ÑеÑение о Ñмене знака/поÑÑдка каждÑй Ñаз менÑеÑÑÑ).
СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо в маÑÑиве ÑоÑек, Ñ ÑелÑÑ ÑÑоÑмиÑоваÑÑ Ð½Ð°Ð±Ð¾ÑÑ Ð¸Ð· веÑÑин Ð´Ð»Ñ Ð³Ñаней ÑимплекÑа, Ð¼Ñ Ð´Ð²Ð¸Ð¶ÐµÐ¼ÑÑ Ð¸Ð· конÑа в наÑало, иÑклÑÑÐ°Ñ Ð¾ÑеÑеднÑÑ ÑоÑÐºÑ Ð¸ наÑÐ¸Ð½Ð°Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñ Ð¿Ð¾Ñледней ÑоÑки. ÐÑо жÑÑÑко ÑвÑзано Ñ Ñем, ÑÑо Ð¼Ñ ÑеÑили вÑÑиÑаÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ поÑледнÑÑ ÑоÑÐºÑ Ð¸Ð· пеÑвÑÑ Ð¿Ñи вÑÑиÑлении гипеÑобÑÑма ÑимплекÑа.
ÐеÑÐ²Ð°Ñ Ð³ÑÐ°Ð½Ñ Ð¸ ÑледÑÑÑÐ°Ñ Ð³ÑÐ°Ð½Ñ Ñ Ð²ÐµÑÑинами имеÑÑ Ð¾Ð±Ñее ÑебÑо . ÐÑли мÑÑленно взглÑнÑÑÑ Ð½Ð° ÑÐ¸Ð¼Ð¿Ð»ÐµÐºÑ ÑнаÑÑжи и обойÑи ÑнаÑала пеÑвÑÑ Ð³ÑÐ°Ð½Ñ Ð² поÑÑдке возÑаÑÑÐ°Ð½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑов ÑоÑек, а заÑем Ñак же вÑоÑÑÑ, Ñо обÑее ÑебÑо пÑи ÑÑом бÑÐ´ÐµÑ Ð¿Ñойдено в пÑоÑивоположнÑÑ Ð½Ð°Ð¿ÑавлениÑÑ . СледоваÑелÑно ÑеÑение о Ñом, обмениваÑÑ Ð»Ð¸ меÑÑами две веÑÑÐ¸Ð½Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð¿ÑоÑивоположнÑм аналогиÑÐ½Ð¾Ð¼Ñ ÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿ÐµÑвой гÑани. Ð Ñак далее (ÑеÑение о Ñмене знака/поÑÑдка каждÑй Ñаз менÑеÑÑÑ).
СледÑÐµÑ Ð¾ÑмеÑиÑÑ, ÑÑо в маÑÑиве ÑоÑек, Ñ ÑелÑÑ ÑÑоÑмиÑоваÑÑ Ð½Ð°Ð±Ð¾ÑÑ Ð¸Ð· веÑÑин Ð´Ð»Ñ Ð³Ñаней ÑимплекÑа, Ð¼Ñ Ð´Ð²Ð¸Ð¶ÐµÐ¼ÑÑ Ð¸Ð· конÑа в наÑало, иÑклÑÑÐ°Ñ Ð¾ÑеÑеднÑÑ ÑоÑÐºÑ Ð¸ наÑÐ¸Ð½Ð°Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñ Ð¿Ð¾Ñледней ÑоÑки. ÐÑо жÑÑÑко ÑвÑзано Ñ Ñем, ÑÑо Ð¼Ñ ÑеÑили вÑÑиÑаÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ поÑледнÑÑ ÑоÑÐºÑ Ð¸Ð· пеÑвÑÑ Ð¿Ñи вÑÑиÑлении гипеÑобÑÑма ÑимплекÑа.
ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ гÑани, кÑоме Ð·Ð°Ð´Ð°Ð½Ð¸Ñ ÑпиÑка веÑÑин и ÑпиÑка внеÑÐ½Ð¸Ñ ÑоÑек, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ задаÑÑ ÑпиÑок ÑоÑÐµÐ´Ð½Ð¸Ñ (англ. adjacency list) гÑаней. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ гÑани он бÑÐ´ÐµÑ ÑодеÑжаÑÑ Ñовно ÑлеменÑов. Так как ÑÑаÑÑовÑй ÑÐ¸Ð¼Ð¿Ð»ÐµÐºÑ ÑодеÑÐ¶Ð¸Ñ Ð³ÑанÑ, Ñо оÑевидно, ÑÑо Ð´Ð»Ñ Ð»Ñбой его гÑани в ÑпиÑок ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней попадÑÑ Ð²Ñе оÑÑалÑнÑе гÑани ( ÑÑÑк).
ÐлавнÑй Ñикл.
ТепеÑÑ ÐµÑÑÑ Ð²ÑеменнÑй многоÑголÑник Ñ ÐºÐ¾ÑоÑÑм можно ÑабоÑаÑÑ Ð² главном Ñикле. Рглавном Ñикле ÑÑÐ¾Ñ Ð²ÑеменнÑй многоÑголÑник доÑÑÑаиваеÑÑÑ, Â«Ð·Ð°Ñ Ð²Ð°ÑÑваÑ» вÑÑ Ð±Ð¾Ð»ÑÑе и болÑÑе пÑоÑÑÑанÑÑва, а вмеÑÑе Ñ Ð½Ð¸Ð¼ и ÑоÑки иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ множеÑÑва, пока не наÑÑÐ°Ð½ÐµÑ Ñакой моменÑ, когда вне многогÑанника не оÑÑанеÑÑÑ Ð½Ð¸ одной ÑоÑки. Ðалее опиÑÑ ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ Ð±Ð¾Ð»ÐµÐµ подÑобно. Рименно Ñо, как он ÑÑÑÑоен в моей ÑеализаÑии.
ÐлавнÑй Ñикл â ÑÑо Ñикл по гÑанÑм. Ðа каждой иÑеÑаÑии ÑÑеди гÑаней Ñ Ð½ÐµÐ¿ÑÑÑÑми ÑпиÑками внеÑÐ½Ð¸Ñ ÑоÑек вÑбиÑаеÑÑÑ ÑÐ°Ð¼Ð°Ñ Ð»ÑÑÑÐ°Ñ Ð³ÑÐ°Ð½Ñ (англ. best facet); лÑÑÑÐ°Ñ Ð² Ñом ÑмÑÑле, ÑÑо ÑÐ°Ð¼Ð°Ñ Ð´Ð°Ð»ÑнÑÑ ÑоÑка из ÑпиÑка внеÑÐ½Ð¸Ñ ÑоÑек Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð´Ð°Ð»ÑÑе Ð¾Ñ Ð³Ñани, Ñем Ñ Ð´ÑÑÐ³Ð¸Ñ Ð³Ñаней. Цикл завеÑÑаеÑÑÑ, когда гÑаней Ñ Ð½ÐµÐ¿ÑÑÑÑми ÑпиÑками внеÑÐ½Ð¸Ñ ÑоÑек не оÑÑалоÑÑ.
Ð Ñеле главного Ñикла вÑбÑÐ°Ð½Ð½Ð°Ñ Ð³ÑÐ°Ð½Ñ ÑдалÑеÑÑÑ ÐºÐ°Ðº заведомо не ÑвлÑÑÑаÑÑÑ Ð³ÑанÑÑ Ð²ÑпÑклой оболоÑки. Ðо пÑедваÑиÑелÑно она «ÑазбиÑаеÑÑÑ Ð½Ð° ÑоÑÑавлÑÑÑие». Ðз ÑпиÑка внеÑÐ½Ð¸Ñ ÑоÑек извлекаеÑÑÑ ÑÐ°Ð¼Ð°Ñ Ð´Ð°Ð»ÑнÑÑ ÑоÑка (англ. furthest point) â она навеÑнÑка ÑвлÑеÑÑÑ Ð²ÐµÑÑиной вÑпÑклой оболоÑки. ÐÑÑалÑнÑе ÑоÑки пеÑемеÑаÑÑÑÑ Ð² оÑделÑнÑй вÑеменнÑй ÑпиÑок неназнаÑеннÑÑ ÑоÑек . Ðалее по ÑпиÑкам ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней, наÑÐ¸Ð½Ð°Ñ Ñо ÑпиÑка гÑани , Ð¾Ð±Ñ Ð¾Ð´Ð¸ÑÑÑ Ð³ÑÐ°Ñ ÑмежноÑÑи гÑаней вÑеменного многогÑанника и ÐºÐ°Ð¶Ð´Ð°Ñ Ð³ÑÐ°Ð½Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑÑÑ Ð² ÑпиÑок Ñже поÑеÑÑннÑÑ (англ. visited) гÑаней и ÑеÑÑиÑÑеÑÑÑ Ð½Ð° видимоÑÑÑ (англ. visibility) из ÑоÑки . ÐÑли гÑÐ°Ð½Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ð°Ñ Ð¸Ð· ÑоÑки , Ñо ÐµÑ ÑоÑедние гÑани далее не Ð¾Ð±Ñ Ð¾Ð´ÑÑÑÑ, инаÑе Ð¾Ð±Ñ Ð¾Ð´ÑÑÑÑ. ÐÑли Ñ Ð¾ÑеÑедной видимой гÑани ÑÑеди ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней еÑÑÑ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñе из ÑоÑки , Ñо она Ð¿Ð¾Ð¿Ð°Ð´Ð°ÐµÑ Ð² ÑпиÑок гÑаниÑнÑÑ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ Ð³Ñаней (англ. before-the-horizon как пÑоÑивоположноÑÑÑ over-the-horizon â «загоÑизонÑнÑй»). Ðо еÑли вÑе ÑоÑедние гÑани ÑвлÑÑÑÑÑ Ð²Ð¸Ð´Ð¸Ð¼Ñми, Ñо ÑÐ°ÐºÐ°Ñ Ð³ÑÐ°Ð½Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑÑÑ Ð² ÑпиÑок гÑаней на Ñдаление. ÐоÑле Ð¾Ð±Ñ Ð¾Ð´Ð° гÑаÑа ÑмежноÑÑи гÑаней ÑпиÑок гÑаниÑнÑÑ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ Ð³Ñаней и ÑпиÑок гÑаней на Ñдаление в ÑÑмме ÑодеÑÐ¶Ð°Ñ Ð²Ñе видимÑе из ÑоÑки гÑани. ТепеÑÑ ÑдалÑÑÑÑÑ Ð²Ñе гÑани из ÑпиÑка на Ñдаление. ÐÑиÑÑм ÐºÐ°Ð¶Ð´Ð°Ñ ÑдалÑÐµÐ¼Ð°Ñ Ð³ÑÐ°Ð½Ñ Ð½Ðµ ÑдалÑеÑÑÑ Ð¸Ð· ÑпиÑков ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней Ñ ÑÐ²Ð¾Ð¸Ñ ÑоÑедей. Так делаÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñно, поÑÐ¾Ð¼Ñ ÑÑо даже в ÑлÑÑае еÑли ÑоÑеднÑÑ Ð³ÑÐ°Ð½Ñ ÑвлÑеÑÑÑ Ð³ÑаниÑной видимой гÑанÑÑ, из ÑпиÑка ÐµÑ ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней в далÑнейÑем иÑполÑзÑеÑÑÑ ÑолÑко инÑоÑмаÑÐ¸Ñ Ð¾ ÑоÑедÑÑве Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ñми из ÑоÑки гÑанÑми. Следом за ÑпиÑком гÑаней на Ñдаление пÑоÑмаÑÑиваеÑÑÑ ÑпиÑок гÑаниÑнÑÑ Ð²Ð¸Ð´Ð¸Ð¼ÑÑ Ð³Ñаней. ÐÐ°Ð¶Ð´Ð°Ñ Ð³ÑаниÑÐ½Ð°Ñ Ð²Ð¸Ð´Ð¸Ð¼Ð°Ñ Ð³ÑÐ°Ð½Ñ Â«ÑазбиÑаеÑÑÑ» (далее понадобиÑÑÑ ÐµÑ ÑпиÑок ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней и ÑпиÑок веÑÑин) и ÑдалÑеÑÑÑ. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ гÑаниÑной видимой гÑани ÑоздаÑÑÑÑ Ð½Ð¾Ð²Ñе гÑани (Ð¾Ñ Ð¾Ð´Ð½Ð¾Ð¹ до ÑÑÑк), коÑоÑÑе добавлÑÑÑÑÑ Ð² ÑпиÑок новÑÑ Ð³Ñаней. ÐÑи ÑÑом пÑоÑмаÑÑиваеÑÑÑ ÑпиÑок ÐµÑ ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней и Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ гÑани из ÑÑого ÑпиÑка, ÑвлÑÑÑейÑÑ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ð¾Ð¹, иÑеÑÑÑ Ð¾Ð±Ñее ÑебÑо Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ гÑаниÑной видимой гÑанÑÑ. Ð ÑпиÑок веÑÑин новой гÑани вÑпиÑÑваÑÑÑÑ Ð²ÐµÑÑÐ¸Ð½Ñ Ð¾Ð±Ñие Ð´Ð»Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ð¾Ð¹ и гÑаниÑной видимой гÑаней (Ñ.е. веÑÑÐ¸Ð½Ñ Ð¾Ð±Ñего ÑебÑа), пÑиÑÑм именно в Ñом поÑÑдке, в коÑоÑом они запиÑÐ°Ð½Ñ Ð² ÑпиÑке веÑÑин гÑаниÑной видимой гÑани. РебÑо (англ. horizon ridge), кÑÑаÑи, ÑвлÑеÑÑÑ ÑаÑÑÑÑ Ð³Ð¾ÑизонÑа Ñой ÑаÑÑи повеÑÑ Ð½Ð¾ÑÑи вÑеменного многогÑанника, коÑоÑÐ°Ñ Ð²Ð¸Ð´Ð½Ð° из ÑоÑки . Та единÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑÑина гÑаниÑной видимой гÑани, коÑоÑÐ°Ñ Ð½Ðµ пÑÐµÐ½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ ÑÑÐ¾Ð¼Ñ ÑебÑÑ, заменÑеÑÑÑ Ð½Ð° ÑоÑÐºÑ Ð² ÑпиÑке веÑÑин новой гÑани, оÑÑалÑнÑе же веÑÑÐ¸Ð½Ñ â Ñе же ÑÑо и в (ÑпоÑÑдоÑенном) ÑпиÑке веÑÑин гÑаниÑной видимой гÑани и ÑÑоÑÑ Ð½Ð° ÑÐµÑ Ð¶Ðµ меÑÑÐ°Ñ . Таким обÑазом поÑÑÑоеннÑй ÑпиÑок веÑÑин новой гÑани гаÑанÑиÑÑÐµÑ ÐµÑ Ð¿ÑавилÑнÑÑ Ð¾ÑиенÑаÑиÑ, Ñо еÑÑÑ Ð¿Ñи ÑаÑÑÑÑе ÐµÑ Ð½Ð¾ÑмиÑованного ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ð»Ð¾ÑкоÑÑи ноÑÐ¼Ð°Ð»Ñ Ð±ÑÐ´ÐµÑ Ð½Ð°Ð¿Ñавлена вовне вÑеменного многогÑанника и знаÑение ÑмеÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð²ÐµÑнÑй знак. ÐоÑле Ñого, как вÑе гÑаниÑнÑе видимÑе гÑани обÑабоÑÐ°Ð½Ñ Ð¼Ñ Ð¸Ð¼ÐµÐµÐ¼ ÑпиÑок новÑÑ Ð³Ñаней. УÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð³Ð¸Ð¿ÐµÑплоÑкоÑÑей Ð´Ð»Ñ ÑÑÐ¸Ñ Ð³Ñаней возможно ÑаÑÑÑиÑаÑÑ ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле Ñого, как Ð¼Ñ Ð¸Ð¼ÐµÐµÐ¼ ÑпиÑки веÑÑин Ð´Ð»Ñ Ð½Ð¸Ñ . Так же, пÑи Ñоздании новÑÑ Ð³Ñаней, в Ð¸Ñ ÑпиÑки ÑоÑÐ´ÐµÐ½Ð¸Ñ Ð³Ñаней можно добавиÑÑ Ð¿Ð¾ одной гÑани, а именно: ÑооÑвеÑÑÑвÑÑÑÑÑ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼ÑÑ Ð³ÑанÑ, коÑоÑÐ°Ñ Ð±Ñла ÑоÑедней Ð´Ð»Ñ Ð³ÑаниÑной видимой гÑани пÑи ÑоÑмиÑовании ÑпиÑка веÑÑин новой гÑани. ÐÑевидно, ÑÑо оÑÑалÑнÑе ÑоÑедние гÑани Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ иÑкаÑÑ ÑÑеди оÑÑалÑнÑÑ Ð½Ð¾Ð²ÑÑ Ð³Ñаней.
Ðак оказалоÑÑ (пÑи ÑемплиÑовании пÑоÑайлеÑом из Google Performance Tools), болÑÑе вÑего вÑемени в ÑлÑÑае болÑÑÐ¸Ñ ÑазмеÑноÑÑей и/или Ð¿Ð»Ð¾Ñ Ð¸Ñ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ (Ñ.е. когда болÑÑÐ°Ñ ÑаÑÑÑ ÑоÑек ÑвлÑеÑÑÑ Ð²ÐµÑÑинами вÑпÑклой оболоÑки) алгоÑиÑм пÑÐ¾Ð²Ð¾Ð´Ð¸Ñ Ð² поиÑке ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней Ð´Ð»Ñ Ð½Ð¾Ð²ÑÑ Ð³Ñаней. Рмоей ÑеализаÑии изнаÑалÑно алгоÑиÑм бÑл ÑÑÑÑоен пÑеделÑно пÑоÑÑо: пеÑебиÑалиÑÑ Ð²Ñе возможнÑе паÑÑ (два вложеннÑÑ Ñикла) гÑаней из ÑпиÑка новÑÑ Ð³Ñаней и пÑоизводилиÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ ÑпоÑÑдоÑеннÑÑ (по номеÑÑ Ð¸Ð· Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑпиÑка ÑоÑек) ÑпиÑков веÑÑин Ñ Ð¾Ð´Ð½Ð¸Ð¼ неÑовпадением (модиÑиÑиÑованнÑй алгоÑиÑм std::set_difference или std::set_symmetric_difference). То еÑÑÑ ÑÑавнений, где â колиÑеÑÑво новÑÑ Ð³Ñаней. Ðо в далÑнейÑем мне ÑдалоÑÑ Ð²ÑигÑаÑÑ Ð¿Ð°ÑÑ (двоиÑнÑÑ =) поÑÑдков в ÑкоÑоÑÑи поиÑка ÑоÑÐµÐ´Ð½Ð¸Ñ Ð¸ÑполÑзовав ÑпоÑÑдоÑеннÑе аÑÑоÑиаÑивнÑе маÑÑÐ¸Ð²Ñ (std::set) в ÑÑом Ñзком меÑÑе. ÐообÑе, еÑÑÑ ÑÐµÐ»Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑÑ Ð·Ð½Ð°Ð½Ð¸Ð¹, коÑоÑÐ°Ñ ÑвÑзана Ñ ÑÑой задаÑей (опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑоÑедей) â ÑÑо locality-sensitive hashing. РоÑигиналÑной ÑеализаÑии qhull иÑполÑзÑÑÑÑÑ ÐºÐ°Ðº Ñаз Ñ ÐµÑи (не LSH). Рней Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑебÑа (двÑÑ Ð³Ñаней) Ñ ÑаниÑÑÑ Ð¾ÑделÑÐ½Ð°Ñ ÑÑÑÑкÑÑÑа даннÑÑ (ÑпиÑок веÑÑин ÑебÑа и инÑоÑмаÑÐ¸Ñ Ð¾ гÑанÑÑ Â«Ð½Ð°Ð´Â» и «под» ÑебÑом), ÐºÐ°Ð¶Ð´Ð°Ñ Ð³ÑÐ°Ð½Ñ ÑодеÑÐ¶Ð¸Ñ ÑпиÑок ÑÐ²Ð¾Ð¸Ñ ÑÑбеÑ. ÐÐ»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑоÑедÑÑва гÑаней (ÑÑеди гÑаней из ÑпиÑка новÑÑ Ð³Ñаней) Ð´Ð»Ñ Ð²ÑÐµÑ ÑÑÐ±ÐµÑ Ð³Ñаней ÑоздаÑÑÑÑ Ð°ÑÑоÑиаÑивнÑй неÑпоÑÑдоÑеннÑй маÑÑив Ñ ÐµÑей маÑÑивов Ð¸Ñ Ð²ÐµÑÑин (Ñ Ð¾Ð´Ð½Ð¸Ð¼ пÑопÑÑком (англ. skip) и одной оÑбÑоÑеной веÑÑиной ). То еÑÑÑ Ñавнений Ñ ÐµÑей. ÐÑли пÑоиÑÑ Ð¾Ð´Ð¸Ñ ÐºÐ¾Ð»Ð»Ð¸Ð·Ð¸Ñ (и поÑледÑÑÑее полное Ñовпадение ÑпиÑков) Ñ ÐµÑей, Ñо (оÑевидно) Ñакие две гÑани имеÑÑ Ð¾Ð±Ñее ÑебÑо (Ñ ÐµÑ, кÑÑаÑи, пÑи ÑÑом можно ÑдалиÑÑ Ð´Ð»Ñ ÑменÑÑÐµÐ½Ð¸Ñ Ñ ÐµÑ-ÑаблиÑÑ) и каждÑÑ Ð¸Ð· Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ добавиÑÑ Ð² ÑпиÑок ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней дÑÑгой. ÐÑÐ¾Ñ ÑпоÑоб Ñ Ð½Ðµ иÑполÑзÑÑ, Ñак как ни в ÑÑандаÑÑной библиоÑеке, ни в STL Ð½ÐµÑ Ñакого ÑÑедÑÑва, как hash combiner (upd. поÑÑÑпила инÑоÑмаÑиÑ, ÑÑо лÑÑÑий вÑÐ±Ð¾Ñ â ÑÑо пÑоÑÑо XOR). Ð¡Ð°Ð¼Ð¾Ð¼Ñ ÑпеÑиализиÑоваÑÑ Ð±ÐµÐ· ÑеоÑеÑико-инÑоÑмаÑионного обоÑÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾ÑÑекÑноÑÑи std::hash Ð´Ð»Ñ std::vector< std::size_t > мне не Ñ Ð¾ÑелоÑÑ. Ðменно поÑÑÐ¾Ð¼Ñ Ñ Ð¸ÑполÑзовал аÑÑоÑиаÑивнÑй ÑпоÑÑдоÑеннÑй конÑÐµÐ¹Ð½ÐµÑ ÑÑÐ±ÐµÑ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней. Ð ÑезÑлÑÑаÑе (ÑÑÐ´Ñ Ð¿Ð¾ вÑемÑ) Ð¼Ð¾Ñ ÑеализаÑÐ¸Ñ Ð°Ð»Ð³Ð¾ÑиÑма пÑоигÑÑÐ²Ð°ÐµÑ qhull в ÑкоÑоÑÑи аÑимпÑоÑиÑеÑки в Ð¾Ñ Ð´Ð¾ Ñаз (Ð´Ð»Ñ Ñазного Ñода Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ ).
СÑавниÑелÑное ÑеÑÑиÑование.
ÐбÑазÑом ÑлÑÐ¶Ð¸Ñ Â«ÐºÐ°Ð½Ð¾Ð½Ð¸ÑеÑкаÑ» ÑеализаÑÐ¸Ñ Ð°Ð»Ð³Ð¾ÑиÑма Quickhull qhull, ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÑеÑез Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿Ð°ÐºÐµÑов (в Ubuntu 14.04 LTS). ÐÐ»Ñ Ð³ÐµÐ½ÐµÑаÑии Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¸Ð· ÑÑого же пакеÑа qhull-bin иÑполÑзовалаÑÑ ÑÑилиÑа rbox. Ðоманда rbox t n D4 30000 s > /tmp/qhuckhull.txt ÑоздаÑÑ Ñайл Ñ ÐºÐ¾Ð¾ÑдинаÑами 30000 ÑоÑек на ÑеÑÑÑÑÑ Ð¼ÐµÑной ÑÑеÑе. Ðоманда rbox t n D10 30 s > /tmp/quickhull.txt ÑоздаÑÑ Ñайл Ñ ÐºÐ¾Ð¾ÑдинаÑами 30 ÑоÑек на деÑÑÑимеÑной ÑÑеÑе. ÐолиÑеÑÑво памÑÑи, коÑоÑое заÑÑаÑÐ¸Ð²Ð°ÐµÑ Ð¿ÑогÑамма можно поÑмоÑÑеÑÑ Ð² вÑводе ÑÑилиÑÑ /usr/bin/time Ñ ÐºÐ»ÑÑом -v. Таким обÑазом в вÑводе /usr/bin/time -v bin/quickhull /tmp/quickhull.txt | head -7 можно ÑзнаÑÑ Ð¿Ð¾ÑÑебление и памÑÑи и пÑоÑеÑÑоÑного вÑемени (оÑиÑенного Ð¾Ñ Ð²Ñемени на ÑÑение Ñайлов и вÑвод на ÑеÑминал) Ð´Ð»Ñ Ð¼Ð¾ÐµÐ¹ ÑеализаÑии, а в вÑводе /usr/bin/time -v qconvex s Qt Tv TI /tmp/quickhull.txt â Ð´Ð»Ñ Â«ÐºÐ°Ð½Ð¾Ð½Ð¸ÑеÑкой» ÑеализаÑии qhull.
ÐоÑÑекÑноÑÑÑ Ñвоей ÑеализаÑии Ñ Ð¾Ð¿ÑеделÑÑ Ð¿Ð¾ ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва гÑаней вÑпÑклÑÑ Ð¾Ð±Ð¾Ð»Ð¾Ñек. Ðо Ð´Ð»Ñ Ð¾Ñладки (в ÑÐµÐ¶Ð¸Ð¼Ð°Ñ Ð´Ð²ÑÑ - и ÑÑÑÑ Ð¼ÐµÑном) на некоÑоÑом ÑÑапе Ñ ÑеализовÑвал поÑагово (ÑеÑез ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ pause) анимиÑованнÑй вÑвод в ÑоÑмаÑе gnuplot. Ðде-Ñо в коммиÑÐ°Ñ Ð¾Ð½ еÑÑÑ. ÐÑвод пÑогÑÐ°Ð¼Ð¼Ñ â ÑÑо вÑпÑÐºÐ»Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка и пÑонÑмеÑованное множеÑÑво Ð²Ñ Ð¾Ð´Ð½ÑÑ ÑоÑек пÑедÑÑавленнÑе в ÑоÑмаÑе gnuplot.
ÐÑоме Ñого, как-Ñо бÑло наÑал пиÑаÑÑ (но не законÑил) ÑÑилиÑÑ randombox â аналог rbox. randombox задÑмÑвалаÑÑ ÐºÐ°Ðº ÑÑилиÑа, коÑоÑÐ°Ñ Ð³ÐµÐ½ÐµÑиÑÑÐµÑ ÑавномеÑно ÑаÑпÑеделÑннÑе в пÑоÑÑÑанÑÑве (англ. uniform spatial distribution) ÑоÑки, в оÑлиÑие Ð¾Ñ rbox, коÑоÑÐ°Ñ Ð³ÐµÐ½ÐµÑиÑÑÐµÑ ÑоÑки ÑаÑпÑеделÑннÑе неÑавномеÑно. randombox Ð¼Ð¾Ð¶ÐµÑ Ð³ÐµÐ½ÐµÑиÑоваÑÑ Ð½Ð°Ð±Ð¾ÑÑ ÑоÑек, огÑаниÑеннÑе ÑимплекÑом (лÑбой ÑазмеÑноÑÑи, коÑоÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð° в пÑоÑÑÑанÑÑво Ñ ÑоÑками), на единиÑной ÑÑеÑе (англ. unit sphere), в ÑаÑе (англ. ball), на повеÑÑ Ð½Ð¾ÑÑи единиÑного «Ñомбовидного» многогÑанника (англ. unit diamond), внÑÑÑи единиÑного кÑба (англ. unit cube), внÑÑÑи паÑаллелоÑопа, в пÑÐµÐ´ÐµÐ»Ð°Ñ ÑÑандаÑÑного единиÑного ÑимплекÑа (англ. unit simplex), а Ñакже пÑоеÑиÑÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑоÑек в обÑÑм конÑÑа (англ. cone), либо ÑилиндÑа (англ. cylinder). ÐÐ»Ñ Ð³ÐµÐ½ÐµÑаÑии кооÑдинаÑ, ÑавномеÑно ÑаÑпÑеделÑннÑÑ Ð² пÑÐµÐ´ÐµÐ»Ð°Ñ Ð¿ÑоизволÑного ÑиплекÑа (вложимого в пÑоÑÑÑанÑÑво), Ñ Ð½Ð°ÑÑл ÑиÑленно ÑÑабилÑнÑй алгоÑиÑм в инÑеÑнеÑе (ÑеÑез ÑаÑпÑеделение ÐиÑÐ¸Ñ Ð»Ðµ), а Ñакеже пÑидÑмал Ñвой алгоÑиÑм, коÑоÑÑй не оÑлиÑаеÑÑÑ Ñаким ÑвойÑÑвом. РиÑоге вÑбÑал пеÑвÑй.
ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ Â«Ð¿Ð¾ÑÑпаÑÑ» вÑпÑклÑе оболоÑки взглÑдом, иÑполÑзÑÑ gnuplot, из коÑÐ½Ñ Ð¿ÑоекÑа введиÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ rbox n D3 40 t | bin/quickhull > /tmp/quickhull.plt && gnuplot -p -e «load '/tmp/quickhull.plt'». rbox n D3 40 t ÑгенеÑиÑÑÐµÑ 40 ÑоÑек внÑÑÑи огÑаниÑиваÑÑего кÑба (англ. bounding box). ÐлÑÑ t задаÑÑ Ð¸ÑполÑзование ÑекÑÑего вÑемени (в ÑекÑÐ½Ð´Ð°Ñ ) в каÑеÑÑве наÑалÑного знаÑÐµÐ½Ð¸Ñ ÐÐСЧ. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑоÑки на ÑÑеÑе, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ добавиÑÑ ÐºÐ»ÑÑ s. Также инÑеÑеÑно поÑмоÑÑеÑÑ ÐºÐ°Ðº ÑазбиваÑÑÑÑ Ð½ÐµÑимплиÑиалÑнÑе гÑани: rbox n D3 c â кÑб, rbox n D3 729 M1,0,1 â ÑоÑек, ÑаÑположеннÑÑ Ð² ÑелÑÑ ÑÐ·Ð»Ð°Ñ . ÐÑаÑиво вÑглÑÐ´Ð¸Ñ Ð²ÑпÑÐºÐ»Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка ÑпиÑали (англ. helix): rbox n D3 50 l. Ð ÑлÑÑае одновÑеменного ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÑÑого колиÑеÑÑва ÑоÑек, компланаÑнÑÑ Ð³ÑанÑм, болÑÑое знаÑение Ð´Ð»Ñ ÐºÐ¾ÑÑекÑноÑÑи ÑезÑлÑÑаÑов наÑÐ¸Ð½Ð°ÐµÑ Ð¸Ð³ÑаÑÑ ÐºÐ¾Ð½ÑÑанÑа eps, коÑоÑÐ°Ñ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿Ñи конÑÑÑÑиÑовании обÑекÑа алгоÑиÑма. ÐапÑимеÑ, еÑли иÑполÑзоваÑÑ Ð² каÑеÑÑве малого знаÑÐµÐ½Ð¸Ñ std::numeric_limits< value_type >::epsilon(), Ñо в ÑлÑÑае «повÑÑнÑÑого» кÑба из 64 ÑелÑÑ ÑоÑек rbox n D3 64 M3,4 в ÑезÑлÑÑаÑе ÑабоÑÑ Ð°Ð»Ð³Ð¾ÑиÑма Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑй геомеÑÑиÑеÑкий обÑекÑ, не ÑвлÑÑÑийÑÑ Ð²ÑпÑклÑм многоÑголÑником.
ÐÑог или запоздалÑй TL;DR.
ÐÑогом Ð¼Ð¾Ð¸Ñ ÑÑÑдов ÑвилаÑÑ ÑелизаÑÐ¸Ñ Ð°Ð»Ð³Ð¾ÑиÑма Quickhull на C++, доволÑно компакÑÐ½Ð°Ñ Ð¸ не ÑилÑно более медленнаÑ, Ñем ÑеализаÑÐ¸Ñ Ñ qhull.org. ÐлгоÑиÑм полÑÑÐ°ÐµÑ Ð½Ð° Ð²Ñ Ð¾Ð´Ðµ знаÑение ÑазмеÑноÑÑи пÑоÑÑÑанÑÑва, знаÑение малой конÑÑанÑÑ eps и Ð½Ð°Ð±Ð¾Ñ ÑоÑек, пÑедÑÑавлÑемÑй как диапазон, задаваемÑй паÑой иÑеÑаÑоÑов Ñак, как ÑÑо пÑинÑÑо в STL. Ðа пеÑвом ÑÑапе create_simplex ÑÑÑоиÑÑÑ ÑÑаÑÑовÑй ÑÐ¸Ð¼Ð¿Ð»ÐµÐºÑ Ð¸ возвÑаÑаеÑÑÑ ÑоÑеÑнÑй Ð±Ð°Ð·Ð¸Ñ Ð°ÑÑинного (под)пÑоÑÑÑанÑÑва, вмеÑаÑÑего Ð²Ñ Ð¾Ð´Ð½Ñе ÑоÑки. ÐÑли колиÑеÑÑво ÑоÑек в базиÑе болÑÑе, Ñем ÑазмеÑноÑÑÑ Ðвклидова пÑоÑÑÑанÑÑва, вмеÑаÑÑего ÑоÑки, Ñо далее запÑÑкаеÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑм доÑÑÑойки вÑпÑклой оболоÑки. Ðа вÑÑ Ð¾Ð´Ðµ алгоÑиÑм даÑÑ Ð¼Ð°ÑÑив ÑÑÑÑкÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , опиÑÑваÑÑÐ¸Ñ Ð³Ñани вÑпÑклой оболоÑки Ð²Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ множеÑÑва, коÑоÑÑй и ÑвлÑеÑÑÑ Ð¾ÑвеÑом. Ð ÑлÑÑае неÑдаÑи полÑÑаеÑÑÑ ÑоÑеÑнÑй Ð±Ð°Ð·Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑого подпÑоÑÑÑанÑÑва менÑÑей ÑазмеÑноÑÑи, коÑоÑое вмеÑÐ°ÐµÑ Ð²Ñе ÑоÑки. ÐÑполÑзÑÑ Ð°Ð»Ð³Ð¾ÑиÑм ХаÑÑÑ Ð¾Ð»Ð´ÐµÑа можно некоÑоÑÑм обÑазом повеÑнÑÑÑ Ð²Ñ Ð¾Ð´Ð½Ð¾Ðµ множеÑÑво, занÑлив пÑи ÑÑом ÑÑаÑÑие кооÑдинаÑÑ ÑоÑек. Такие кооÑдинаÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ оÑбÑоÑиÑÑ Ð¸ пÑимениÑÑ Ð°Ð»Ð³Ð¾ÑиÑм Quickhull Ñже в пÑоÑÑÑанÑÑве менÑÑей ÑазмеÑноÑÑи. ÐоÑледнее не имплеменÑиÑовано.
ÐÑименениÑ.
У данного алгоÑиÑма еÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво пÑиложений. ÐÑоме Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²ÑпÑклой оболоÑки как Ñаковой, благодаÑÑ ÑомÑ, ÑÑо ÑÑÑеÑÑвÑÐµÑ ÑвÑÐ·Ñ Ð¼ÐµÐ¶Ð´Ñ Ð²ÑпÑклой оболоÑкой, ÑÑиангÑлÑÑией Ðелоне и диагÑаммой ÐоÑоного, неÑложно найÑи пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð°Ð»Ð³Ð¾ÑиÑÐ¼Ñ Â«Ð¾Ð¿Ð¾ÑÑедованно».
ÐÐ°Ð½Ð½Ð°Ñ ÑеализаÑÐ¸Ñ Ñже кое-ÐºÐ¾Ð¼Ñ Ð¿ÑигодилаÑÑ, и бÑла оплаÑена благодаÑноÑÑÑÑ (в Acknowledgements), ÑÑо оÑÐµÐ½Ñ Ð¿ÑиÑÑно.
ÐбновлениÑ.
24.06.2015 г.: Ðобавлена пÑовеÑка вÑпÑклоÑÑи полÑÑаемой геомеÑÑиÑеÑкой ÑÑÑÑкÑÑÑÑ Ð¿Ð¾ алгоÑиÑÐ¼Ñ Kurt Mehlhorn, Stefan Näher, Thomas Schilz, Stefan Schirra, Michael Seel, Raimund Seidel, and Christian Uhrig. Checking geometric programs or verification of geometric structures. In Proc. 12th Annu. ACM Sympos. Comput. Geom., pages 159â165, 1996.
24.06.2015 г.: ÐÑани полÑÑаемого многогÑанника ÑепеÑÑ ÑодеÑÐ¶Ð°Ñ Ð½Ð°Ð±Ð¾ÑÑ Ð²ÐµÑÑин и индекÑов ÑоÑÐµÐ´Ð½Ð¸Ñ Ð³Ñаней ÑпоÑÑдоÑеннÑе Ñаким обÑазом, ÑÑо гÑÐ°Ð½Ñ ÑвлÑеÑÑÑ Ð¿ÑоÑиволежаÑей (англ. opposite) ÑооÑвеÑÑÑвенной веÑÑине. ÐÑо Ð´ÐµÐ»Ð°ÐµÑ ÑÑÑÑкÑÑÑÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ более Ñдобной пÑи иÑполÑзовании в некоÑоÑÑÑ ÑлÑÑаÑÑ .
24.06.2015 г.: ТепеÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑоÑедÑÑва Ð²Ð½Ð¾Ð²Ñ Ð¿Ð¾Ð»ÑÑаемÑÑ Ð³Ñаней иÑполÑзÑÑÑÑÑ Ð¸Ñ Ñ ÑÑи.