Получить географическую карту для Земли, вращение которой остановилось: различия между версиями
Строка 4: | Строка 4: | ||
[[Алгоритм моделирования рельефа]] слишком ресурсоёмкий. По этой причина, а также из-за того, что в будущем планирую моделировать [[lw:Societies simulation|движения людей]], то начну с малоресурсоёмкого алгоритма. Назовем его "направленная волна". Имеется вектор силы. Тазики группирую в ряды, перпендикулярные силе. Сначала расчет идет на уровне рядов, а потом можно внутри ряда. Реалистичной динамики: с вихрями, пеной и брызгами не будет, но будет некоторая иллюзия [[wikiru:Поверхностное натяжение|поверхностного натяжения]]. | [[Алгоритм моделирования рельефа]] слишком ресурсоёмкий. По этой причина, а также из-за того, что в будущем планирую моделировать [[lw:Societies simulation|движения людей]], то начну с малоресурсоёмкого алгоритма. Назовем его "направленная волна". Имеется вектор силы. Тазики группирую в ряды, перпендикулярные силе. Сначала расчет идет на уровне рядов, а потом можно внутри ряда. Реалистичной динамики: с вихрями, пеной и брызгами не будет, но будет некоторая иллюзия [[wikiru:Поверхностное натяжение|поверхностного натяжения]]. | ||
+ | # для каждого тазика (центр верхней грани обозначен как Q) рассчитывается баланс с соседними, например, с северным (центр верхней грани обозначен как Qn) | ||
+ | # нормали поверхности эллипсоида пересекаются в точке M | ||
+ | #: рассчитываются длины отрезков QnM и QM; неизбежно использование [[:Категория:Географические координаты#меридианные|меридианных координат]] | ||
+ | # рассчитываются длина отрезка MN через углы Δϑ и α по [[wikiru:Теорема синусов|теореме синусов]] | ||
+ | #: угол α равен 90<sup>o</sup>, то есть верхняя грань тазика параллельна поверхности эллипсоида в том случае, если на воду не действует ускорение | ||
+ | #: полученные две длины отрезка MN должны совпадать с некоторой точностью | ||
+ | <html> | ||
+ | <svg width="600" height="400" xmlns="http://www.w3.org/2000/svg"> | ||
+ | <!-- Created with Method Draw - http://github.com/duopixel/Method-Draw/ --> | ||
+ | |||
+ | <g> | ||
+ | <title>background</title> | ||
+ | <rect x="-1" y="-1" width="602" height="402" id="canvas_background" fill="#fff"/> | ||
+ | <g id="canvasGrid" display="none"> | ||
+ | <rect id="svg_3" width="100%" height="100%" x="0" y="0" stroke-width="0" fill="url(#gridpattern)"/> | ||
+ | </g> | ||
+ | </g> | ||
+ | <g> | ||
+ | <title>Layer 1</title> | ||
+ | <ellipse fill="#fff" stroke-width="1.5" cx="200.465116" cy="250" id="svg_1" rx="200" ry="150" stroke="#000"/> | ||
+ | <line fill="none" stroke="#000" stroke-width="1.5" stroke-opacity="null" fill-opacity="null" x1="0" y1="250" x2="600" y2="250" id="svg_2" stroke-linejoin="null" stroke-linecap="null"/> | ||
+ | <ellipse fill="#fff" stroke="#000" stroke-width="1.5" stroke-opacity="null" fill-opacity="null" cx="200" cy="250" id="svg_5" rx="2" ry="2"/> | ||
+ | <ellipse fill="#fff" stroke="#000" stroke-width="1.5" stroke-opacity="null" fill-opacity="null" cx="488.5" cy="251.5" id="svg_6"/> | ||
+ | <ellipse fill="#fff" stroke="#000" stroke-width="1.5" stroke-opacity="null" fill-opacity="null" cx="548.5" cy="278.5" id="svg_7"/> | ||
+ | <line fill="none" stroke-width="1.5" x1="200" y1="250" x2="287.581079" y2="115.959466" id="svg_8" stroke-linejoin="null" stroke-linecap="null" stroke="#0000ff"/> | ||
+ | <line fill="none" stroke="#0000ff" stroke-width="1.5" x1="200" y1="250" x2="359.5" y2="159.5" id="svg_9" stroke-linejoin="null" stroke-linecap="null"/> | ||
+ | <line stroke="#56aaff" transform="rotate(-0.40490052103996277 291.05801391601966,224.96374511718471) " fill="none" stroke-width="1.5" x1="382.111071" y1="140.723929" x2="200.00493" y2="309.203544" id="svg_10" stroke-linejoin="null" stroke-linecap="null"/> | ||
+ | <line stroke="#56aaff" fill="none" stroke-width="1.5" x1="298.728658" y1="91.491678" x2="200" y2="332.499965" id="svg_11" stroke-linejoin="null" stroke-linecap="null"/> | ||
+ | <line stroke="#ff56ff" transform="rotate(84.48666381835938 277.8903503417968,204.54406738281253) " fill="none" stroke-width="1.5" x1="193.174604" y1="134.111038" x2="362.606109" y2="274.977102" id="svg_12" stroke-linejoin="null" stroke-linecap="null"/> | ||
+ | <line stroke-linecap="null" stroke-linejoin="null" id="svg_13" y2="400" x2="200.384651" y1="50" x1="200" fill-opacity="null" stroke-width="1.5" stroke="#000000" fill="none"/> | ||
+ | <text xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="24" id="svg_16" y="317.057231" x="213.246899" stroke-width="0" stroke="#56aaff" fill="#56aaff">M</text> | ||
+ | <text xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="24" id="svg_17" y="105.769258" x="260.384636" stroke-opacity="null" stroke-width="0" stroke="#ff56ff" fill="#007fff">Qn</text> | ||
+ | <text xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="24" id="svg_18" y="168.846167" x="371.153841" stroke-opacity="null" stroke-width="0" stroke="#ff56ff" fill="#007fff">Q</text> | ||
+ | <line stroke="#ffaa56" stroke-linecap="null" stroke-linejoin="null" id="svg_19" y2="134.230792" x2="328.846157" y1="101.493765" x1="255.983916" stroke-width="1.5" fill="none"/> | ||
+ | <line stroke="#ffaa56" stroke-linecap="null" stroke-linejoin="null" id="svg_20" y2="133.461557" x2="328.076922" y1="187.200379" x1="389.38282" stroke-width="1.5" fill="none"/> | ||
+ | <text style="cursor: move;" xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="24" id="svg_21" y="138.076943" x="332.692312" stroke-width="0" stroke="#ffaa56" fill="#ff00ff">N</text> | ||
+ | <ellipse ry="2.307692" rx="1.923076" id="svg_22" cy="134.194972" cx="326.565328" stroke-width="1.5" stroke="#ffaa56" fill="#ff00ff"/> | ||
+ | <ellipse ry="2.307692" rx="1.923076" id="svg_23" cy="160.241483" cx="360.053701" stroke-width="1.5" stroke="#ffaa56" fill="#007fff"/> | ||
+ | <ellipse ry="2.307692" rx="1.923076" id="svg_24" cy="116.520553" cx="289.356027" stroke-width="1.5" stroke="#ffaa56" fill="#007fff"/> | ||
+ | <ellipse ry="2.307692" rx="1.923076" id="svg_25" cy="295.590317" cx="215.867654" stroke-width="1.5" stroke="#56aaff" fill="#ff00ff"/> | ||
+ | <path transform="rotate(17.333145141601562 292.76629638671886,122.87789154052744) " stroke="#ffaa56" id="svg_26" d="m287.835244,124.878295l2.465538,-2.000401l0,1.0002l3.698302,0l0,-3.000601l-1.232768,0l2.465537,-2.000401l2.465537,2.000401l-1.232768,0l0,5.001002l-6.163839,0l0,1.0002l-2.465539,-2.000401l0,0z" fill-opacity="null" stroke-opacity="null" stroke-width="1.5" fill="none"/> | ||
+ | <path transform="rotate(43.97276306152344 359.7430419921876,167.99418640136713) " stroke="#ffaa56" id="svg_27" d="m354.811988,169.994576l2.465538,-2.000401l0,1.0002l3.698302,0l0,-3.000601l-1.232768,0l2.465537,-2.000401l2.465537,2.000401l-1.232769,0l0,5.001002l-6.163839,0l0,1.000201l-2.465538,-2.000401l0,0z" fill-opacity="null" stroke-opacity="null" stroke-width="1.5" fill="none"/> | ||
+ | <text stroke="#56aaff" transform="matrix(1.113876461982727,0,0,0.8454328876433692,-32.520087833418074,32.16742012011869) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="24" id="svg_28" y="133.488372" x="286.976744" stroke-opacity="null" stroke-width="0" fill="#ffaa56"/> | ||
+ | <path transform="rotate(17.333145141601562 292.7663116455078,122.87789154052734)" stroke="#ffaa56" id="svg_29" d="m287.835244,124.878295l2.465538,-2.000401l0,1.0002l3.698302,0l0,-3.000601l-1.232768,0l2.465537,-2.000401l2.465537,2.000401l-1.232769,0l0,5.001002l-6.163839,0l0,1.000201l-2.465538,-2.000401l0,0z" fill-opacity="null" stroke-opacity="null" stroke-width="1.5" fill="none"/> | ||
+ | <text xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="24" id="svg_30" y="140.930233" x="293.953488" stroke-opacity="null" stroke-width="0" stroke="#56aaff" fill="#ffaa56">α</text> | ||
+ | <path stroke="#56aaff" transform="rotate(-43.69541549682617 225.22518920898446,282.3741760253907) " id="svg_32" d="m227.203743,283.166467c0,-2.026965 -1.771658,-3.670147 -3.957108,-3.670147l0,-2.936118l0,0c2.18545,0 3.957108,1.643181 3.957108,3.670147l0,2.936118c0,1.673581 -1.220695,3.13521 -2.967831,3.553605l0,1.468059l-0.989277,-2.819575l0.989277,-3.05266l0,1.468059l0,0c1.178107,-0.282127 2.150775,-1.051252 2.637473,-2.085546" stroke-opacity="null" stroke-width="0" fill="#ff0000"/> | ||
+ | <text stroke="#000" transform="matrix(0.7187328338623047,0,0,0.7333263754844666,68.80937531590462,76.8978396942839) " xml:space="preserve" text-anchor="start" font-family="Helvetica, Arial, sans-serif" font-size="24" id="svg_33" y="294.841553" x="221.172329" stroke-opacity="null" stroke-width="0" fill="#ff0000">Δϑ</text> | ||
+ | </g> | ||
+ | </svg> | ||
+ | </html> | ||
= Динамика воды = | = Динамика воды = |
Версия 20:48, 31 января 2019
комментарии в LiveJournal
Алгоритм моделирования рельефа слишком ресурсоёмкий. По этой причина, а также из-за того, что в будущем планирую моделировать движения людей, то начну с малоресурсоёмкого алгоритма. Назовем его "направленная волна". Имеется вектор силы. Тазики группирую в ряды, перпендикулярные силе. Сначала расчет идет на уровне рядов, а потом можно внутри ряда. Реалистичной динамики: с вихрями, пеной и брызгами не будет, но будет некоторая иллюзия поверхностного натяжения.
- для каждого тазика (центр верхней грани обозначен как Q) рассчитывается баланс с соседними, например, с северным (центр верхней грани обозначен как Qn)
- нормали поверхности эллипсоида пересекаются в точке M
- рассчитываются длины отрезков QnM и QM; неизбежно использование меридианных координат
- рассчитываются длина отрезка MN через углы Δϑ и α по теореме синусов
- угол α равен 90o, то есть верхняя грань тазика параллельна поверхности эллипсоида в том случае, если на воду не действует ускорение
- полученные две длины отрезка MN должны совпадать с некоторой точностью
Динамика воды[править]
Если убрать из модели центробежное ускорение и подогнать гидросферу к форме нового геоида, то полученная карта будет неправильной, потому что игнорируется перетекание воды во внутренних впадинах.
Поэтому необходимо начинать с современной формы геоида и постепенно шаг за шагом уменьшать центробежное ускорение, балансирую гидросферу методом решёточных уравнений Больцмана.
Ограничения модели[править]
Законы сохранения импульса и момента импульса выполняются, если будет смоделировано время физических процессов и будут учтены трение и вязкость воды. Погрешностью, вызванной трением и вязкостью воды, пренебрегаю.
Предполагается, что ни гидросфера, ни другие факторы не разрушают литосферу. Также вода не меняет своего состояния: не замерзает-конденсируется, не тает-испаряется. Погрешностью, вызванной допущением про неизменность литосферы и гидросферы, пренебрегаю.
Соответственно из законов сохранения выполняется в полной мере только закон сохранения массы.