{"id":484530,"date":"2026-06-22T11:14:50","date_gmt":"2026-06-22T11:14:50","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=484530"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=484530","title":{"rendered":"\u041f\u0438\u0448\u0435\u043c CFD solver \u0434\u043b\u044f\u00a0\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 (\u0447\u0430\u0441\u0442\u044c 1)"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041d\u0430\u0447\u043d\u0443 \u0438\u0437\u0434\u0430\u043b\u0435\u043a\u0430. \u041f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u0441\u00a0\u043c\u043e\u0438\u043c \u0434\u0440\u0443\u0433\u043e\u043c \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u0430\u00a0\u043c\u043e\u044e \u0434\u043e\u043b\u044e \u0432\u044b\u043f\u0430\u043b\u0430 \u0447\u0430\u0441\u0442\u044c \u0430\u044d\u0440\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u043e\u0432. \u042f \u0441\u0442\u0430\u043b \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u00a0\u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0438 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0435 \u043d\u0435\u00a0\u0442\u0430\u043a \u0443\u0436 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e. \u0412\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0\u0443\u0433\u043b\u0430 \u0430\u0442\u0430\u043a\u0438 (\u0443\u0433\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u0438), \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u00a0\u0444\u043e\u0440\u043c\u044b \u0442\u0435\u043b\u0430 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430\u00a0\u0442\u0435\u043b\u043e, \u043d\u043e\u00a0\u0438 \u043d\u0430\u00a0\u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0439 \u0432\u043e\u0437\u0434\u0443\u0445, \u0435\u0433\u043e \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 &#8216;<em>\u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u0435\u0449\u0435&#8217;<\/em>,<em> <\/em>\u0447\u0442\u043e\u00a0\u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043d\u043e\u0432\u0430 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430\u00a0\u043d\u0430\u0448\u0435 \u0442\u0435\u043b\u043e. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0439 \u043a\u0440\u0443\u0433 \u0438\u0437\u00a0\u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0434\u0438\u0444\u0444\u0443\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u00a0\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u0435 \u0431\u043e\u043b\u0435\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438. \u0412\u00a0\u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u044f \u0441\u0434\u0430\u043b\u0441\u044f \u0438 \u0443\u00a0\u043c\u0435\u043d\u044f\u00a0\u0431\u044b\u043b \u0432\u044b\u0431\u043e\u0440: \u043f\u043e\u0439\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0438\u043b\u0438\u00a0\u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u00a0\u0432\u0441\u0435\u043c \u044d\u0442\u043e\u043c \u0438 \u043f\u043e\u0434\u00a0\u043a\u043e\u043d\u0435\u0446 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0430\u043c\u043e\u043c\u0443. \u0423\u0433\u0430\u0434\u0430\u0439\u0442\u0435 \u0447\u0442\u043e\u00a0\u044f \u0432\u044b\u0431\u0440\u0430\u043b? \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u00a0\u0436\u0435 \u0432\u0442\u043e\u0440\u043e\u0435.<\/p>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c \u0441\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0438 \u0447\u0442\u043e\u00a0\u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c. \u0412\u00a0\u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0444\u0438\u0437\u0438\u043a\u0443 \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0438 \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u00a0\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435. <\/p>\n<p>\u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0432\u00a0\u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435, \u043a\u0430\u043a\u00a0\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (\u0431\u0443\u0434\u044c \u0442\u043e \u0432\u043e\u0434\u044b \u0438\u043b\u0438\u00a0\u0432\u043e\u0437\u0434\u0443\u0445\u0430). \u0412\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0447\u0430\u0441\u0442\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0\u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u043e\u00a0\u0438 \u0441\u0430\u043c\u0438 \u043d\u0430\u00a0\u0441\u0435\u0431\u044f. \u0418\u0437\u00a0\u2014 \u0437\u0430\u00a0\u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0430\u0436\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u00a0\u0444\u0438\u0437\u0438\u043a\u0435\u00a0\u2014 \u041c\u041a\u0422 (\u041c\u043e\u043b\u0435\u043a\u0443\u043b\u044f\u0440\u043d\u043e\u2011\u043a\u0438\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0435\u043e\u0440\u0438\u044f). \u0412\u00a0\u043c\u043e\u0435\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438, \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043d\u0435\u00a0\u043f\u0438\u0441\u0430\u0442\u044c 2\u00a0\u0437\u0430\u043a\u043e\u043d \u041d\u044c\u044e\u0442\u043e\u043d\u0430 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437\u00a0\u0447\u0430\u0441\u0442\u0438\u0446, \u0430\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u043a\u00a0\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0438 \u043e\u0431\u044a\u0435\u043c, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0440\u0435\u0434\u043d\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0442\u043e, \u043a\u0430\u043a\u00a0\u0433\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0432\u0435\u0441\u0442\u0438. <\/p>\n<p>\u041d\u043e\u00a0\u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0443 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0412\u00a0\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f\u0445 \u043b\u044e\u0431\u044f\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a, \u0432\u00a0\u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e \u043e\u0431\u044a\u0435\u043c (\u043f\u043b\u043e\u0449\u0430\u0434\u044c) \u0438 \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0434\u043b\u044f\u00a0\u043d\u0435\u0433\u043e. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0430\u043a\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u0443\u00a0\u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442, \u0442\u0435\u043c \u0442\u043e\u0447\u043d\u0435\u0435 \u0443\u00a0\u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/318\/d50\/3d4\/318d503d40fb9b7bb739a5cfde7ced55.png\" alt=\"\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0435\u0442\u043a\u0438\" title=\"\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0435\u0442\u043a\u0438\" width=\"510\" height=\"340\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/318\/d50\/3d4\/318d503d40fb9b7bb739a5cfde7ced55.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/318\/d50\/3d4\/318d503d40fb9b7bb739a5cfde7ced55.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0435\u0442\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0443\u00a0\u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0432\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0422\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u044d\u0442\u0438\u043c. <\/p>\n<p>\u0423\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u041d\u0430\u0432\u044c\u0435\u2011\u0421\u0442\u043e\u043a\u0441\u0430 (\u0431\u0435\u0437 \u0432\u044f\u0437\u043a\u043e\u0441\u0442\u0438):<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{\\partial V}{\\partial t} = - (V * \\nabla)V - \\frac{1}{\\rho}\\nabla p\" alt=\"\\frac{\\partial V}{\\partial t} = - (V * \\nabla)V - \\frac{1}{\\rho}\\nabla p\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e5\/e51\/e5111723d82093fb88a5412897ed7974.svg\" width=\"208\" height=\"40\" data-width=\"26.008\" data-height=\"5.188\" data-vertical-align=\"-2.028\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e5\/e51\/e5111723d82093fb88a5412897ed7974.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e5\/e51\/e5111723d82093fb88a5412897ed7974.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0413\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><code>V<\/code>\u00a0\u2014 \u043e\u0431\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c<\/p>\n<\/li>\n<li>\n<p><code>(V\u00b7\u2207)V<\/code>\u00a0\u2014 \u043a\u043e\u043d\u0432\u0435\u043a\u0446\u0438\u044f <\/p>\n<\/li>\n<li>\n<p><code><em>\u03c1<\/em><\/code><em>\u00a0\u2014 <\/em> \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0445\u0430 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430)<\/p>\n<\/li>\n<li>\n<p><code>\u2207p<\/code>\u00a0\u2014 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0435\u00a0\u043f\u0443\u0433\u0430\u0439\u0442\u0435\u0441\u044c, \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u043c\u043e\u0433\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f. \u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0438 \u043e\u0442\u00a0\u0441\u0430\u043c\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0438 \u043e\u0442\u00a0\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c, \u043a\u0430\u043a\u00a0\u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u043d\u0435\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u0441\u0430\u043c\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{\\partial V}{\\partial t} = -(V * \\nabla)V\" alt=\"\\frac{\\partial V}{\\partial t} = -(V * \\nabla)V\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/75\/75b\/75b606b25d3c5914f91e7e67c39f7355.svg\" width=\"144\" height=\"32\" data-width=\"18.054\" data-height=\"4.749\" data-vertical-align=\"-1.809\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/75\/75b\/75b606b25d3c5914f91e7e67c39f7355.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/75\/75b\/75b606b25d3c5914f91e7e67c39f7355.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0430\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043d\u0435\u00a0\u0431\u044b\u043b\u0430 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0439:<\/p>\n<p>\u043f\u0440\u0438:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"V = (u. v)\" alt=\"V = (u. v)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/95\/952\/952832b0512739d668c7c4dd2d1711b3.svg\" width=\"72\" height=\"16\" data-width=\"9.915\" data-height=\"2.262\" data-vertical-align=\"-0.566\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/95\/952\/952832b0512739d668c7c4dd2d1711b3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/95\/952\/952832b0512739d668c7c4dd2d1711b3.svg 781w\" loading=\"lazy\" decode=\"async\"\/><img decoding=\"async\" class=\"formula\" source=\"\\nabla=(\\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial {y}})\" alt=\"\\nabla=(\\frac{\\partial}{\\partial x}, \\frac{\\partial}{\\partial {y}})\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4c\/4ca\/4ca126d4dd1ef8ef4550029aac125cad.svg\" width=\"112\" height=\"40\" data-width=\"14.623\" data-height=\"5.163\" data-vertical-align=\"-2.016\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4c\/4ca\/4ca126d4dd1ef8ef4550029aac125cad.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4c\/4ca\/4ca126d4dd1ef8ef4550029aac125cad.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0433\u0434\u0435:<\/p>\n<ul>\n<li>\n<p>u\u00a0\u2014 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430\u00a0OX<\/p>\n<\/li>\n<li>\n<p>v\u00a0\u2014 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430\u00a0OY<\/p>\n<\/li>\n<\/ul>\n<p>\u043f\u043e\u043b\u0443\u0447\u0438\u043c, \u0447\u0442\u043e\u00a0c\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u00a0V \u0438\u00a0\u2207\u00a0\u2014 \u044d\u0442\u043e \u0441\u0443\u043c\u043c\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"V*\\nabla = (\\frac{\\partial u}{\\partial x} + \\frac{\\partial v}{\\partial y})\" alt=\"V*\\nabla = (\\frac{\\partial u}{\\partial x} + \\frac{\\partial v}{\\partial y})\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/1d\/1dd\/1dd44a903ea97ed916e0723cba559643.svg\" width=\"160\" height=\"40\" data-width=\"20.259\" data-height=\"5.163\" data-vertical-align=\"-2.016\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/1d\/1dd\/1dd44a903ea97ed916e0723cba559643.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/1d\/1dd\/1dd44a903ea97ed916e0723cba559643.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0442\u043e\u0433\u0434\u0430:<\/p>\n<p> <strong> (V\u00b7\u2207)V = (u\u00b7\u2202u\/\u2202x + v\u00b7\u2202u\/\u2202y, u\u00b7\u2202v\/\u2202x + v\u00b7\u2202v\/\u2202y) <\/strong><\/p>\n<p>\u043f\u043e\u043b\u0443\u0447\u0438\u043c, \u0447\u0442\u043e\u00a0\u0434\u043b\u044f\u00a0\u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0438 (\u0441\u043c. \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u041d\u0430\u0432\u044c\u0435\u2011\u0421\u0442\u043e\u043a\u0441\u0430):<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{\\partial u}{\\partial t} = -(u\\frac{\\partial u}{\\partial x} + v\\frac{\\partial u}{\\partial y}) \" alt=\"\\frac{\\partial u}{\\partial t} = -(u\\frac{\\partial u}{\\partial x} + v\\frac{\\partial u}{\\partial y}) \" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/cf\/cfd\/cfd5285ad1569f5b97261d66b757beda.svg\" width=\"176\" height=\"40\" data-width=\"22.405\" data-height=\"5.163\" data-vertical-align=\"-2.016\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/cf\/cfd\/cfd5285ad1569f5b97261d66b757beda.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/cf\/cfd\/cfd5285ad1569f5b97261d66b757beda.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0430\u00a0\u0434\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{\\partial v}{\\partial t} = -(u\\frac{\\partial v}{\\partial x} + v\\frac{\\partial v}{\\partial y})\" alt=\"\\frac{\\partial v}{\\partial t} = -(u\\frac{\\partial v}{\\partial x} + v\\frac{\\partial v}{\\partial y})\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e1\/e1c\/e1c7d5bd9340afacbf62d321776aeb30.svg\" width=\"176\" height=\"40\" data-width=\"22.023\" data-height=\"5.163\" data-vertical-align=\"-2.016\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e1\/e1c\/e1c7d5bd9340afacbf62d321776aeb30.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e1\/e1c\/e1c7d5bd9340afacbf62d321776aeb30.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0441\u0430\u043c\u043e\u0439 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432\u043e\u0442 \u0447\u0442\u043e:<\/p>\n<ul>\n<li>\n<p>\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u00a0\u0441\u0441\u044b\u043b\u043a\u0435: <a href=\"https:\/\/github.com\/PerKyyling\/AirSimulation\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/PerKyyling\/AirSimulation<\/a><\/p>\n<\/li>\n<li>\n<p>\u0430\u0432\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b \u043a\u043e\u0434\u0430 \u0432\u00a0\u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u00a0\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u00a0\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0432\u043e\u00a0\u0431\u043b\u0430\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e\u00a0\u0441\u0441\u044b\u043b\u043a\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u00a0\u0444\u0438\u0437\u0438\u043a\u0438 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a\u00a0\u043f\u0440\u043e\u0433\u0435. \u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d python\u2011\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430\u00a0\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 arcade (\u0430\u043d\u0430\u043b\u043e\u0433 pygame, \u043d\u043e\u00a0\u043f\u043e\u043b\u0435\u0433\u0447\u0435):<\/p>\n<pre><code class=\"python\">import arcadeWIDTH = 1000HEIGHT = 1000TITLE = \"Simulation\"CELL_SIZE = 10WHITE = (255, 255, 255)LITE_BLUE = (200, 230, 255)# \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u043e\u0442 arcade.Windowclass Window(arcade.Window):    # \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c init \u043a\u043b\u0430\u0441\u0441\u0430    def __init__(self, width, height, title):        super().__init__(width, height, title)    # on_update \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u043e\u0439    def on_update(self, delta_time):      pass    # \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f    def on_draw(self):      self.clear()def main():    sm = Window(WIDTH, HEIGHT, TITLE)    arcade.run()if __name__ == \"__main__\":    main()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e\u00a0\u043d\u0430\u0448\u0435 \u0442\u0435\u043b\u043e\u00a0\u2014 \u043a\u0432\u0430\u0434\u0440\u0430\u0442, \u043e\u043d\u043e \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e V = 10\u00a0\u043c\/\u0441. \u0412\u043e\u0437\u0434\u0443\u0445 \u043f\u043e\u043a\u043e\u0438\u0442\u0441\u044f.<br \/>\u0422\u043e\u0433\u0434\u0430, \u0435\u0441\u043b\u0438 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0442\u0441\u0447\u0435\u0442\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441\u00a0\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u043c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c, \u0447\u0442\u043e\u00a0\u0432\u043e\u0437\u0434\u0443\u0445 \u0438\u043c\u0435\u0435\u0442 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 10\u00a0\u043c\/\u0441. \u0422\u043e\u0433\u0434\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0432\u0430 numpy\u2011\u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c (u) \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c (v):<\/p>\n<pre><code class=\"python\">import arcadeimport numpyWIDTH = 1000HEIGHT = 1000TITLE = \"Simulation\"CELL_SIZE = 10WHITE = (255, 255, 255)LITE_BLUE = (200, 230, 255)class Window(arcade.Window):    def __init__(self, width, height, title):        super().__init__(width, height, title)        self.background_color = arcade.color.WHITE        self.N = 100        self.V = 10  # \u043c * \u0441^-1        self.u_old = np.full((self.N, self.N), self.V, dtype=np.float32)        self.v_old = np.zeros((self.N, self.N), dtype=np.float32)            def on_update(self, delta_time):      pass    def on_draw(self):      self.clear()def main():    sm = Window(WIDTH, HEIGHT, TITLE)    arcade.run()if __name__ == \"__main__\":    main()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>u_old\u00a0\u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u00a0\u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u043c\u0438 (\u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 t = 0\u00a0\u0432\u0441\u0435 u[i][j] = V)<\/p>\n<p>v_old\u00a0\u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u00a0\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u043c\u0438, \u043f\u043e\u0442\u043e\u043a \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0435\u043d =&gt; \u0432\u0441\u0435 0<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u00a0\u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 N \u0438 \u043e\u0442\u043a\u0443\u0434\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u044b old, \u043d\u0430\u0447\u043d\u0443 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043f\u043e\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441\u00a0\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438 \u0432\u00a0init, \u0447\u0442\u043e\u0431\u044b \u043a\u00a0\u043d\u0438\u043c \u043d\u0435\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f:<\/p>\n<pre><code class=\"python\">    def __init__(self, width, height, title):        super().__init__(width, height, title)        self.background_color = arcade.color.WHITE        self.N = 100        self.V = 10  # \u043c * \u0441^-1        self.dx = 0.001        self.dy = 0.001        self.dt = 0.0000625        self.u_old = np.full((self.N, self.N), self.V, dtype=np.float32)        self.u_new = np.zeros((self.N, self.N), dtype=np.float32)        self.v_old = np.zeros((self.N, self.N), dtype=np.float32)        self.v_new = np.zeros((self.N, self.N), dtype=np.float32)        # \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430        self.collision = np.zeros((self.N, self.N), dtype=np.float32)        self.p = np.zeros((self.N, self.N), dtype=np.float32)        self.p_old = np.zeros((self.N, self.N), dtype=np.float32)        #\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0448\u043b\u043e        self.time_total = 0        # \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430        self.left_border = 40   # X_min        self.right_border = 60  # X_max        self.low_border = 40    # Y_min        self.up_border = 60     # Y_max        self.rho = 1.225 \/ 10 ** 6        # \u043f\u043e\u043a\u0430 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e        self.epsilon = 1e-3        self.max_disp = 0        # \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c 1 \u0432 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0430\u043c \u0432\u0441\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438        for j in range(self.low_border, self.up_border):          for i in range(self.left_border, self.right_border):              self.v_old[j][i] = 0              self.u_old[j][i] = 0              self.collision[j][i] = 1        # \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0435\u0441\u0442\u044c \u043b\u0438 \u043e\u0431\u044c\u0435\u043a\u0442 \u0432 \u043a\u043b\u0435\u0442\u043a\u0435 (i, j), \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442\u044c:        # if self.collision[i][j] == 1<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u044b \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c 1\u043c^3, \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043a\u0430\u043c\u0438\u00a0\u2014 dx, dy (1\u00a0\u0441\u043c), \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 dt (625\u00a0* 10^-7), p\u00a0\u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0439, \u043e\u00a0\u043d\u0435\u043c \u043f\u043e\u0437\u0436\u0435, rho\u00a0\u2014 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0445\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b old \u0438 new, \u043d\u0430\u0448\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e: \u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 t = t0, \u043c\u044b \u0438\u043c\u0435\u043b\u0438 \u0432\u0441\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0441\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 old, \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0448\u043b\u043e dt \u0438 \u043d\u0430\u0448\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043f\u043e\u00a0\u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c \u043d\u0430\u00a0new \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 t = t1. \u0422\u043e\u0433\u0434\u0430 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u043a\u00a0\u0441\u0442\u0430\u0440\u044b\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e dt \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e\u00a0\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e, \u0442\u0430\u043a \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0437\u043d\u0430\u044f \u0441\u0442\u0430\u0440\u044b\u0439.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0432\u0435\u043a\u0446\u0438\u0438. \u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u043c \u043d\u0430\u0448\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0432\u0435\u043a\u0446\u0438\u0438 \u0432\u00a0\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b. (i\u00a0\u2014 \u0441\u0442\u0440\u043e\u043a\u0430, j\u00a0\u2014 \u0441\u0442\u043e\u043b\u0431\u0435\u0446)<\/p>\n<p>\u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u00a0\u043e\u0441\u0438 OX:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{\\partial u}{\\partial t} = -(u\\frac{\\partial u}{\\partial x} + v\\frac{\\partial u}{\\partial y}) \" alt=\"\\frac{\\partial u}{\\partial t} = -(u\\frac{\\partial u}{\\partial x} + v\\frac{\\partial u}{\\partial y}) \" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/cf\/cfd\/cfd5285ad1569f5b97261d66b757beda.svg\" width=\"176\" height=\"40\" data-width=\"22.405\" data-height=\"5.163\" data-vertical-align=\"-2.016\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/cf\/cfd\/cfd5285ad1569f5b97261d66b757beda.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/cf\/cfd\/cfd5285ad1569f5b97261d66b757beda.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u0432:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{u[i][j]^{t + 1} - u[i][j]^t}{dt} = - u[i][j]^t * \\frac{u[i][j]^t - u[i][j - 1]^t}{dx}-v[i][j]^t*\\frac{v[i][j]^t - v[i - 1][j]^t}{dy}\" alt=\"\\frac{u[i][j]^{t + 1} - u[i][j]^t}{dt} = - u[i][j]^t * \\frac{u[i][j]^t - u[i][j - 1]^t}{dx}-v[i][j]^t*\\frac{v[i][j]^t - v[i - 1][j]^t}{dy}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a9\/a9e\/a9e1e56a1edc8ed66d0e9a67ff1e2d9d.svg\" width=\"656\" height=\"40\" data-width=\"82.651\" data-height=\"5.509\" data-vertical-align=\"-2.189\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a9\/a9e\/a9e1e56a1edc8ed66d0e9a67ff1e2d9d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/a\/a9\/a9e\/a9e1e56a1edc8ed66d0e9a67ff1e2d9d.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0442\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{v[i][j]^{t + 1} - v[i][j]^t}{dt} = - u[i][j]^t * \\frac{u[i][j]^t - u[i][j - 1]^t}{dx}-v[i][j]^t*\\frac{v[i][j]^t - v[i - 1][j]^t}{dy}\" alt=\"\\frac{v[i][j]^{t + 1} - v[i][j]^t}{dt} = - u[i][j]^t * \\frac{u[i][j]^t - u[i][j - 1]^t}{dx}-v[i][j]^t*\\frac{v[i][j]^t - v[i - 1][j]^t}{dy}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/be\/be6\/be6779efddace4633939400164c2ead4.svg\" width=\"656\" height=\"40\" data-width=\"82.258\" data-height=\"5.509\" data-vertical-align=\"-2.189\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/be\/be6\/be6779efddace4633939400164c2ead4.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/b\/be\/be6\/be6779efddace4633939400164c2ead4.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u043e\u0442\u043a\u0443\u0434\u0430 \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c <img decoding=\"async\" class=\"formula inline\" source=\"u[i][j]^{t+1}\" alt=\"u[i][j]^{t+1}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5d8\/5d8b4aa36d88cd8c99ab98c65f81f54c.svg\" width=\"64\" height=\"16\" data-width=\"8.332\" data-height=\"2.565\" data-vertical-align=\"-0.566\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5d8\/5d8b4aa36d88cd8c99ab98c65f81f54c.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5d8\/5d8b4aa36d88cd8c99ab98c65f81f54c.svg 781w\" loading=\"lazy\" decode=\"async\"\/>\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"v[i][j]^{t + 1}\" alt=\"v[i][j]^{t + 1}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/10\/10f\/10f1746a25301eb0d148148aafb54fcb.svg\" width=\"64\" height=\"16\" data-width=\"8.136\" data-height=\"2.565\" data-vertical-align=\"-0.566\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/10\/10f\/10f1746a25301eb0d148148aafb54fcb.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/10\/10f\/10f1746a25301eb0d148148aafb54fcb.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c 2\u00a0\u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u00a0\u043d\u0430\u0448 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"python\">    # \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u043d\u0438\u043a\u0430\u0442\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442, \u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c    def zeroingCollisionSpeed(self):        for j in range(self.low_border, self.up_border):            for i in range(self.left_border, self.right_border):                self.u_old[j][i] = 0                self.v_old[j][i] = 0        def speedTransmission(self):        # \u0434\u043b\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0438  \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0432\u0440\u043e\u0434\u0435 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0443\u043b\u0435\u0442\u0430\u043b\u043e        for j in range(self.low_border, self.up_border):            for i in range(self.left_border, self.right_border):                self.u_new[j][i] = 0                self.v_new[j][i] = 0        # \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432 \u0441\u043b\u0435\u0434. \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438        for j in range(1, self.N - 1):            for i in range(1, self.N - 1):                if self.collision[j][i] == 1:                    continue                if self.u_old[j][i] &gt; 0:                    dudx = (self.u_old[j][i] - self.u_old[j][i-1]) \/ self.dx                else:                    dudx = (self.u_old[j][i+1] - self.u_old[j][i]) \/ self.dx                if self.v_old[j][i] &gt; 0:                    dudy = (self.u_old[j][i] - self.u_old[j-1][i]) \/ self.dy                else:                    dudy = (self.u_old[j+1][i] - self.u_old[j][i]) \/ self.dy                self.u_new[j][i] = self.u_old[j][i] - self.dt * (                        self.u_old[j][i] * dudx + self.v_old[j][i] * dudy)                if self.u_old[j][i] &gt; 0:                    dvdx = (self.v_old[j][i] - self.v_old[j][i-1]) \/ self.dx                else:                    dvdx = (self.v_old[j][i+1] - self.v_old[j][i]) \/ self.dx                if self.v_old[j][i] &gt; 0:                    dvdy = (self.v_old[j][i] - self.v_old[j-1][i]) \/ self.dy                else:                    dvdy = (self.v_old[j+1][i] - self.v_old[j][i]) \/ self.dy                self.v_new[j][i] = self.v_old[j][i] - self.dt * (                        self.u_old[j][i] * dvdx + self.v_old[j][i] * dvdy)        # \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f - \u0432\u043e\u0437\u0434\u0443\u0445 \u0432\u043b\u0435\u0442\u0430\u0435\u0442 \u0441\u043b\u0435\u0432\u0430        self.u_new[:, 0] = self.V        self.v_new[:, 0] = 0        # \u0438 \u0443\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c        self.u_new[:, self.N-1] = self.u_new[:, self.N-2]        self.v_new[:, self.N-1] = self.v_new[:, self.N-2]        self.u_new[0, :] = self.u_new[1, :]        self.v_new[0, :] = 0        self.u_new[self.N-1, :] = self.u_new[self.N-2, :]        self.v_new[self.N-1, :] = 0                # \u0441\u043d\u043e\u0432\u0430 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430        for j in range(self.low_border, self.up_border):            for i in range(self.left_border, self.right_border):                self.u_new[j][i] = 0                self.v_new[j][i] = 0<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f on_update \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">    def on_update(self, delta_time):        self.zeroingCollisionSpeed()        self.speedTransmission()        self.v_old = self.v_new.copy()        self.u_old = self.u_new.copy()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f\u00a0\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<pre><code class=\"python\">    def on_draw(self):        self.clear()        # \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u043e\u0431\u0449\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u043a\u0430\u0445        max_speed = np.max(np.sqrt(self.u_new ** 2 + self.v_new ** 2))        if max_speed == 0:            max_speed = 1.0        # \u0442.\u043a. \u043c\u044b \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c 1 \u043c\u0435\u0442\u0440, \u0434\u0435\u043b\u0438\u043c \u0435\u0433\u043e \u043d\u0430 100 \u0447\u0430\u0441\u0442\u0435\u0439, \u0430 \u0432 \u0434\u043b\u0438\u043d\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 1000px        for j in range(self.N):            for i in range(self.N):                x = i * CELL_SIZE                y = j * CELL_SIZE                # \u0435\u0441\u043b\u0438 \u0432 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 - \u0440\u0438\u0441\u0443\u0439 \u0431\u0435\u043b\u044b\u043c                if self.collision[j][i] == 1:                    arcade.draw_lbwh_rectangle_filled(x, y, CELL_SIZE - 1, CELL_SIZE - 1, WHITE)                else:                    # \u0438\u043d\u0430\u0447\u0435 \u0440\u0438\u0441\u0443\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c                    speed = np.sqrt(self.u_new[j][i] ** 2 + self.v_new[j][i] ** 2)                    norm = min(speed \/ max_speed, 1.0)                    # \u0421\u0438\u043d\u0438\u0439 \u2014 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u2014 \u0431\u044b\u0441\u0442\u0440\u043e                    color = (int(norm * 255), 0, int((1 - norm) * 255))                    arcade.draw_lbwh_rectangle_filled(x, y, CELL_SIZE - 1, CELL_SIZE - 1, color)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f31\/f20\/ca5\/f31f20ca5187c2c8f5cb494b4bde45a0.png\" alt=\"\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u043e\u043d\u0432\u0435\u043a\u0446\u0438\u0438\" title=\"\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u043e\u043d\u0432\u0435\u043a\u0446\u0438\u0438\" width=\"1000\" height=\"1028\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/f31\/f20\/ca5\/f31f20ca5187c2c8f5cb494b4bde45a0.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f31\/f20\/ca5\/f31f20ca5187c2c8f5cb494b4bde45a0.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0\u043a\u043e\u043d\u0432\u0435\u043a\u0446\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u041d\u0430\u0432\u044c\u0435\u2011\u0421\u0442\u043e\u043a\u0441\u0430:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{\\partial V}{\\partial t} = - (V * \\nabla)V - \\frac{1}{\\rho}\\nabla p\" alt=\"\\frac{\\partial V}{\\partial t} = - (V * \\nabla)V - \\frac{1}{\\rho}\\nabla p\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e5\/e51\/e5111723d82093fb88a5412897ed7974.svg\" width=\"208\" height=\"40\" data-width=\"26.008\" data-height=\"5.188\" data-vertical-align=\"-2.028\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e5\/e51\/e5111723d82093fb88a5412897ed7974.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e5\/e51\/e5111723d82093fb88a5412897ed7974.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u041c\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 t, \u043a\u0430\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 t + dt \u0431\u0435\u0437\u00a0\u0443\u0447\u0435\u0442\u0430 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e\u00a0\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u2011\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442\u00a0\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u043d\u043e\u00a0\u043d\u0430\u043c \u043d\u0430\u0434\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u0434\u043e\u043a\u0441: \u043e\u0434\u043d\u043e \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u00a0\u2014 \u0434\u0432\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445. \u041d\u043e\u00a0\u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0430\u043a\u0442, \u0432\u043e\u0437\u0434\u0443\u0445 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u0438\u0437\u00a0\u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u00a0\u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0438\u0437\u043a\u043e\u0433\u043e, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0430 \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e\u00a0\u0432\u043e\u0437\u0434\u0443\u0445 \u043d\u0435\u00a0\u0441\u0436\u0438\u043c\u0430\u0435\u043c\u044b\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u0434\u0438\u0432\u0435\u0440\u0433\u0435\u043d\u0446\u0438\u044f \u0440\u0430\u0432\u043d\u0430 0. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0438\u0437\u2011\u0437\u0430 \u0447\u0435\u0433\u043e \u0432\u043e\u0437\u0434\u0443\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0447\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u0418\u0437\u2011\u0437\u0430 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f. \u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 0, \u0430\u00a0\u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u043a\u0443\u0431\u0438\u043a\u0430 V, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u0434\u0438\u0432\u0435\u0440\u0433\u0435\u043d\u0446\u0438\u044f \u043d\u0435 0, \u0432\u0435\u0434\u044c \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0438\u0439 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435. \u0423\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u041f\u0443\u0430\u0441\u0441\u043e\u043d\u0430 (\u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u00a0\u041d\u0430\u0432\u044c\u0435\u2011\u0421\u0442\u043e\u043a\u0441\u0430):<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\nabla^2p = \\frac{\\rho}{dt}(\\nabla*u^*)\" alt=\"\\nabla^2p = \\frac{\\rho}{dt}(\\nabla*u^*)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/ce\/cee\/cee3556cf62f6be8248ff98895ed920b.svg\" width=\"144\" height=\"32\" data-width=\"18.079\" data-height=\"4.106\" data-vertical-align=\"-1.488\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/ce\/cee\/cee3556cf62f6be8248ff98895ed920b.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/c\/ce\/cee\/cee3556cf62f6be8248ff98895ed920b.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0433\u0434\u0435 u*\u00a0\u2014 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c), \u0442\u043e\u0433\u0434\u0430, \u0435\u0441\u043b\u0438:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\nabla^2p = \\frac{\\partial^2p}{\\partial x^2} + \\frac{\\partial^2p}{\\partial y ^2}\" alt=\"\\nabla^2p = \\frac{\\partial^2p}{\\partial x^2} + \\frac{\\partial^2p}{\\partial y ^2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/222\/2222ecfcb5b497b716c5f220082d21ef.svg\" width=\"144\" height=\"40\" data-width=\"18.87\" data-height=\"5.509\" data-vertical-align=\"-2.189\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/222\/2222ecfcb5b497b716c5f220082d21ef.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/222\/2222ecfcb5b497b716c5f220082d21ef.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0447\u0442\u043e\u00a0\u0432 \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\frac{(p[i][j + 1] - p[i][j]) - (p[i][j] - p[i][j - 1])}{dx^2} + \\frac{(p[i + 1][j] - p[i][j])-(p[i][j]-p[i][j-1])}{dy^2}\" alt=\"\\frac{(p[i][j + 1] - p[i][j]) - (p[i][j] - p[i][j - 1])}{dx^2} + \\frac{(p[i + 1][j] - p[i][j])-(p[i][j]-p[i][j-1])}{dy^2}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/60\/608\/6088d1a5a1ed8dc3f3e5bde2e9ead472.svg\" width=\"688\" height=\"40\" data-width=\"86.912\" data-height=\"5.396\" data-vertical-align=\"-2.132\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/60\/608\/6088d1a5a1ed8dc3f3e5bde2e9ead472.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/60\/608\/6088d1a5a1ed8dc3f3e5bde2e9ead472.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"\\nabla*u\" alt=\"\\nabla*u\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f02\/f02b7343b7455aa5c76dcd49b2bee738.svg\" width=\"40\" height=\"16\" data-width=\"5.315\" data-height=\"2.262\" data-vertical-align=\"-0.566\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f02\/f02b7343b7455aa5c76dcd49b2bee738.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f02\/f02b7343b7455aa5c76dcd49b2bee738.svg 781w\" loading=\"lazy\" decode=\"async\"\/>\u043c\u044b \u0443\u0436\u0435 \u0432\u00a0\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u0441\u0447\u0438\u0442\u0430\u043b\u0438. \u041d\u043e\u00a0\u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f <s>\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f<\/s> \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043c\u044b \u0437\u043d\u0430\u0435\u043c u* \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u043d\u043e\u00a0\u0434\u043b\u044f\u00a0\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f p[i][j] \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f p, \u0432\u00a0\u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0442\u043e\u0447\u043a\u0430\u0445. \u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e, \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 2\u00a0\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u043c\u044b \u0441\u0432\u0435\u043b\u0438 \u043a\u00a0\u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 5, \u043d\u043e\u00a0\u0432\u00a0\u044d\u0442\u043e\u043c \u0438 \u043f\u0440\u0435\u043b\u0435\u0441\u0442\u044c. \u0423\u00a0\u043d\u0430\u0441 \u0432\u0441\u0435 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u043b\u0435\u0436\u0430\u0442 \u0432\u00a0\u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043c\u044b \u0435\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u043d\u0443\u043b\u044f\u043c\u0438, \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u00a0\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0438 0\u00a0\u0434\u0438\u0432\u0435\u0440\u0433\u0435\u043d\u0446\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u00a0\u0442\u043e\u0447\u043a\u0430\u0445 \u043d\u0435 0, \u0430\u00a0\u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c 0, \u0442\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u0430\u0442\u044c \u043d\u0430\u0448\u0438\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0430\u043a, \u0447\u0442\u043e:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\nabla^2p   - \\frac{\\rho}{dt}(\\nabla*u^*) &lt; \\epsilon \\approx0\" alt=\"\\nabla^2p   - \\frac{\\rho}{dt}(\\nabla*u^*) &lt; \\epsilon \\approx0\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fb\/fb8\/fb80fe8ea9c5f163231abf1014312ca1.svg\" width=\"200\" height=\"32\" data-width=\"25.912\" data-height=\"4.106\" data-vertical-align=\"-1.488\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fb\/fb8\/fb80fe8ea9c5f163231abf1014312ca1.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fb\/fb8\/fb80fe8ea9c5f163231abf1014312ca1.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0433\u0434\u0435 epsilon (<img decoding=\"async\" class=\"formula inline\" source=\"\\epsilon\" alt=\"\\epsilon\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92e4da341fe8f4cd46192f21b6ff3aa7.svg\" width=\"12\" height=\"16\" data-width=\"0.919\" data-height=\"2.262\" data-vertical-align=\"-0.566\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92e4da341fe8f4cd46192f21b6ff3aa7.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92e4da341fe8f4cd46192f21b6ff3aa7.svg 781w\" loading=\"lazy\" decode=\"async\"\/>)\u00a0\u2014 \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 \u0432\u00a0\u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435. \u0421\u0442\u043e\u0438\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430\u043c \u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c, \u0432\u0435\u0434\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u044f\u0442\u044c \u043a 0, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043b\u044c\u0437\u044f. \u041a\u0430\u043a\u00a0\u044f \u0441\u043a\u0430\u0437\u0430\u043b \u0440\u0430\u043d\u044c\u0448\u0435, \u0443\u00a0\u043d\u0430\u0441 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0430\u044f \u043e\u0442 4\u00a0\u0434\u0440\u0443\u0433\u0438\u0445, \u0447\u0442\u043e\u00a0\u0434\u0430\u0435\u0442 10\u202f000\u00a0\u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439. \u0422\u0430\u043a\u0443\u044e \u0448\u0442\u0443\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0413\u0430\u0443\u0441\u0441\u0430\u2011\u0417\u0435\u0439\u0434\u0435\u043b\u044f. \u041a\u0443\u0447\u0443 \u0440\u0430\u0437 \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430\u043c\u0438 \u0438 \u0432\u0441\u0435 \u0431\u043b\u0438\u0436\u0435 \u0438 \u0431\u043b\u0438\u0436\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0430\u0442\u044c \u0438\u0445 \u043a\u00a0\u0438\u0441\u0442\u0438\u043d\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0435, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.<\/p>\n<p>\u0417\u043d\u0430\u044f \u0432\u0441\u0435 \u044d\u0442\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c on_update \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0432\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<p>on_update \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"python\">    def on_update(self, delta_time):        self.zeroingCollisionSpeed()        self.speedTransmission()        iteration = 0 # \u043a\u043e\u043b-\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439        # \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043e\u0442 0        self.max_disp = 1.0 # \u0441 \u0434\u0438\u0441\u043f\u0435\u0440\u0441\u0438\u0435\u0439 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e, \u043d\u043e \u043f\u0443\u0441\u0442\u044c \u0442\u0430\u043a        # \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043c\u043d\u043e\u0433\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0438\u043b\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c        while abs(self.max_disp) &gt; self.epsilon and iteration &lt; 100:            # \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0439            self.updatePressure()            iteration += 1        # \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432 \u0441\u043b\u0435\u0434. \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438        self.finalUpdateSpeed()        self.v_old = self.v_new.copy()        self.u_old = self.u_new.copy()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u043d\u0430\u043f\u0438\u0448\u0435\u043c updatePressure():<\/p>\n<pre><code class=\"python\">    # \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u0432\u044b\u0440\u0430\u0436\u0430\u044f \u0435\u0433\u043e \u0438\u0437 \u041f\u0443\u0430\u0441\u0441\u043e\u043d\u0430    def updatePressure(self):        self.max_disp = 0        for j in range(1, self.N - 1):            for i in range(1, self.N - 1):                if self.collision[j][i] == 0:                    dudx = (self.u_new[j][i+1] - self.u_new[j][i-1]) \/ (2 * self.dx)                    dvdy = (self.v_new[j+1][i] - self.v_new[j-1][i]) \/ (2 * self.dy)                    div = dudx + dvdy                    self.p[j][i] = (self.dx**2 * self.dy**2 * (self.rho \/ self.dt) * div -                                    (self.p[j][i+1] + self.p[j][i-1]) * self.dy**2 -                                    (self.p[j+1][i] + self.p[j-1][i]) * self.dx**2) \/ \\                                   (-2 * (self.dx**2 + self.dy**2))                    # \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e                    self.max_disp += abs(self.p[j][i] - self.p_old[j][i])        # \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f: \u0443\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u0440\u0430\u044f\u043c        self.p[:, 0] = self.p[:, 1]        self.p[:, self.N-1] = self.p[:, self.N-2]        self.p[0, :] = self.p[1, :]        self.p[self.N-1, :] = self.p[self.N-2, :]        # \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430        for j in range(self.low_border, self.up_border):            for i in range(self.left_border, self.right_border):                self.p[j][i] = 0        self.p_old = self.p.copy()<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u0443 \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u0437\u2011\u0437\u0430 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"python\">  # \u0440\u0430\u043d\u044c\u0448\u0435 \u0432 \u043a\u043e\u0434\u0435 \u043c\u044b \u0432\u044b\u0440\u0430\u0436\u0430\u043b\u0438 \u043a\u043e\u043d\u0432\u0435\u043a\u0446\u0438\u044e \u0438\u0437 \u041d\u0430\u0432\u044c\u0435-\u0421\u0442\u043e\u043a\u0441\u0430, \u0441\u0435\u0439\u0447\u0430\u0441 \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u0434\u043e \u043a\u043e\u043d\u0446\u0430  def finalUpdateSpeed(self):        for j in range(1, self.N - 1):            for i in range(1, self.N - 1):                if self.collision[j][i] == 1:                    continue                self.u_new[j][i] -= (self.dt \/ self.rho) * (self.p[j][i+1] - self.p[j][i-1]) \/ (2 * self.dx)                self.v_new[j][i] -= (self.dt \/ self.rho) * (self.p[j+1][i] - self.p[j-1][i]) \/ (2 * self.dy)        for j in range(self.low_border, self.up_border):            for i in range(self.left_border, self.right_border):                self.u_new[j][i] = 0                self.v_new[j][i] = 0        # \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e 2 \u0432\u0435\u0449\u0430\u043c:        # 1) \u043d\u0435\u0442\u0443 \u0432\u044f\u0437\u043a\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0437\u043a\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043f\u0435\u0440\u0435\u043f\u0430\u0434\u0430\u0445        # 2) \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0435 \u0432\u0437\u043b\u0435\u0442\u0435\u043b\u0430 (\u0447\u0438\u0441\u043b\u043e \u041a\u0443\u0440\u0430\u043d\u0442\u0430, \u043f\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435, \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0435\u043c\u044f)        max_allowed = self.V * 5        self.u_new = np.clip(self.u_new, -max_allowed, max_allowed)        self.v_new = np.clip(self.v_new, -max_allowed, max_allowed)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e, \u0443\u00a0\u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u041e\u0427\u0415\u041d\u042c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0430\u00a0\u043f\u0438\u0442\u043e\u043d\u0435, \u0430, \u0440\u0430\u0437 \u0442\u0430\u043a, \u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043d\u0430\u00a0C++ (\u044d\u0442\u043e \u0432\u00a0\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u044f \u043f\u0440\u043e\u00a0\u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e), \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u0442\u0430\u043d\u0446\u0435\u0432 \u0441\u00a0\u0431\u0443\u0431\u043d\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fa8\/8fc\/90b\/fa88fc90ba4cb2a79d975a0ff9a616fb.png\" alt=\"\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0431\u0435\u0437 \u0432\u044f\u0437\u043a\u043e\u0441\u0442\u0438\" title=\"\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0431\u0435\u0437 \u0432\u044f\u0437\u043a\u043e\u0441\u0442\u0438\" width=\"1000\" height=\"1028\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/fa8\/8fc\/90b\/fa88fc90ba4cb2a79d975a0ff9a616fb.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fa8\/8fc\/90b\/fa88fc90ba4cb2a79d975a0ff9a616fb.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0431\u0435\u0437\u00a0\u0432\u044f\u0437\u043a\u043e\u0441\u0442\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u00a0\u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0441\u043a\u0430\u0436\u0443, \u043f\u043e\u0447\u0435\u043c\u0443 2\u0434. \u041a\u0430\u043a\u00a0\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0434\u043b\u044f 10^4\u00a0\u0442\u043e\u0447\u0435\u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0443\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0438\u0437\u043a\u0430\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u00a0\u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0434\u0440\u0443\u0433\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u043e\u0441\u044c, \u043d\u043e\u00a0\u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044f\u0442\u044c \u044f\u0437\u044b\u043a. \u0412\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u043d\u0430\u0439\u0434\u0443 \u043d\u0430\u00a0\u0447\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c 3\u0434 \u0441\u043e\u043b\u0432\u0435\u0440 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u0438, \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0438\u0445 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c) \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0443 \u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u0430\u00a0\u043f\u043b\u044e\u0441\u044b.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1050440\/\">https:\/\/habr.com\/ru\/articles\/1050440\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041d\u0430\u0447\u043d\u0443 \u0438\u0437\u0434\u0430\u043b\u0435\u043a\u0430. \u041f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u043d\u0430\u0437\u0430\u0434 \u043c\u044b \u0441\u00a0\u043c\u043e\u0438\u043c \u0434\u0440\u0443\u0433\u043e\u043c \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u0442\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442, \u043d\u0430\u00a0\u043c\u043e\u044e \u0434\u043e\u043b\u044e \u0432\u044b\u043f\u0430\u043b\u0430 \u0447\u0430\u0441\u0442\u044c \u0430\u044d\u0440\u043e\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u043e\u0432. \u042f \u0441\u0442\u0430\u043b \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u00a0\u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0438 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432\u0441\u0435 \u043d\u0435\u00a0\u0442\u0430\u043a \u0443\u0436 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e. \u0412\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0\u0443\u0433\u043b\u0430 \u0430\u0442\u0430\u043a\u0438 (\u0443\u0433\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u0438), \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u00a0\u0444\u043e\u0440\u043c\u044b \u0442\u0435\u043b\u0430 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430\u00a0\u0442\u0435\u043b\u043e, \u043d\u043e\u00a0\u0438 \u043d\u0430\u00a0\u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0439 \u0432\u043e\u0437\u0434\u0443\u0445, \u0435\u0433\u043e \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 &#8216;\u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u0435\u0449\u0435&#8217;, \u0447\u0442\u043e\u00a0\u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043d\u043e\u0432\u0430 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430\u00a0\u043d\u0430\u0448\u0435 \u0442\u0435\u043b\u043e. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u0439 \u043a\u0440\u0443\u0433 \u0438\u0437\u00a0\u0433\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0434\u0438\u0444\u0444\u0443\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u00a0\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432\u0441\u0435 \u0431\u043e\u043b\u0435\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438. \u0412\u00a0\u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u044f \u0441\u0434\u0430\u043b\u0441\u044f \u0438 \u0443\u00a0\u043c\u0435\u043d\u044f\u00a0\u0431\u044b\u043b \u0432\u044b\u0431\u043e\u0440: \u043f\u043e\u0439\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0438\u043b\u0438\u00a0\u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u0443\u0447\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u00a0\u0432\u0441\u0435\u043c \u044d\u0442\u043e\u043c \u0438 \u043f\u043e\u0434\u00a0\u043a\u043e\u043d\u0435\u0446 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0430\u043c\u043e\u043c\u0443. \u0423\u0433\u0430\u0434\u0430\u0439\u0442\u0435 \u0447\u0442\u043e\u00a0\u044f \u0432\u044b\u0431\u0440\u0430\u043b? \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u00a0\u0436\u0435 \u0432\u0442\u043e\u0440\u043e\u0435.\u041d\u0430\u0447\u043d\u0435\u043c \u0441\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0438 \u0447\u0442\u043e\u00a0\u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c. \u0412\u00a0\u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0444\u0438\u0437\u0438\u043a\u0443 \u0432\u0441\u0442\u0440\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0438 \u043f\u043e\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u00a0\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435. \u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0432\u00a0\u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435, \u043a\u0430\u043a\u00a0\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432 (\u0431\u0443\u0434\u044c \u0442\u043e \u0432\u043e\u0434\u044b \u0438\u043b\u0438\u00a0\u0432\u043e\u0437\u0434\u0443\u0445\u0430). \u0412\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c\u00a0\u2014 \u044d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0447\u0430\u0441\u0442\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u00a0\u043e\u0431\u044a\u0435\u043a\u0442, \u043d\u043e\u00a0\u0438 \u0441\u0430\u043c\u0438 \u043d\u0430\u00a0\u0441\u0435\u0431\u044f. \u0418\u0437\u00a0\u2014 \u0437\u0430\u00a0\u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0430\u0436\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u00a0\u0444\u0438\u0437\u0438\u043a\u0435\u00a0\u2014 \u041c\u041a\u0422 (\u041c\u043e\u043b\u0435\u043a\u0443\u043b\u044f\u0440\u043d\u043e\u2011\u043a\u0438\u043d\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0435\u043e\u0440\u0438\u044f). \u0412\u00a0\u043c\u043e\u0435\u043c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438, \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f\u00a0\u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043d\u0435\u00a0\u043f\u0438\u0441\u0430\u0442\u044c 2\u00a0\u0437\u0430\u043a\u043e\u043d \u041d\u044c\u044e\u0442\u043e\u043d\u0430 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437\u00a0\u0447\u0430\u0441\u0442\u0438\u0446, \u0430\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u043a\u00a0\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0438 \u043e\u0431\u044a\u0435\u043c, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0440\u0435\u0434\u043d\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0442\u043e, \u043a\u0430\u043a\u00a0\u0433\u0430\u0437 \u0431\u0443\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0432\u0435\u0441\u0442\u0438. \u041d\u043e\u00a0\u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0443 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432. \u0412\u00a0\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f\u0445 \u043b\u044e\u0431\u044f\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a, \u0432\u00a0\u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439\u2011\u0442\u043e \u043e\u0431\u044a\u0435\u043c (\u043f\u043b\u043e\u0449\u0430\u0434\u044c) \u0438 \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0434\u043b\u044f\u00a0\u043d\u0435\u0433\u043e. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0430\u043a\u0438\u0445 \u0442\u043e\u0447\u0435\u043a \u0443\u00a0\u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442, \u0442\u0435\u043c \u0442\u043e\u0447\u043d\u0435\u0435 \u0443\u00a0\u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f.\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0435\u0442\u043a\u0438\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0443\u00a0\u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0432\u0432\u0435\u0441\u0442\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0422\u0430\u043a \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u044d\u0442\u0438\u043c. \u0423\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u041d\u0430\u0432\u044c\u0435\u2011\u0421\u0442\u043e\u043a\u0441\u0430 (\u0431\u0435\u0437 \u0432\u044f\u0437\u043a\u043e\u0441\u0442\u0438):\u0413\u0434\u0435:V\u00a0\u2014 \u043e\u0431\u0449\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c(V\u00b7\u2207)V\u00a0\u2014 \u043a\u043e\u043d\u0432\u0435\u043a\u0446\u0438\u044f \u03c1\u00a0\u2014  \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0445\u0430 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430)\u2207p\u00a0\u2014 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u041d\u0435\u00a0\u043f\u0443\u0433\u0430\u0439\u0442\u0435\u0441\u044c, \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u043c\u043e\u0433\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f. \u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e\u00a0\u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0438 \u043e\u0442\u00a0\u0441\u0430\u043c\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0438 \u043e\u0442\u00a0\u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u043e\u0433\u0434\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c, \u043a\u0430\u043a\u00a0\u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u00a0\u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u043d\u0435\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u0441\u0430\u043c\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c:\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u0430\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043d\u0435\u00a0\u0431\u044b\u043b\u0430 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0439:\u043f\u0440\u0438:\u0433\u0434\u0435:u\u00a0\u2014 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430\u00a0OXv\u00a0\u2014 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043d\u0430\u00a0OY\u043f\u043e\u043b\u0443\u0447\u0438\u043c, \u0447\u0442\u043e\u00a0c\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u00a0V \u0438\u00a0\u2207\u00a0\u2014 \u044d\u0442\u043e \u0441\u0443\u043c\u043c\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442:\u0442\u043e\u0433\u0434\u0430:  (V\u00b7\u2207)V = (u\u00b7\u2202u\/\u2202x + v\u00b7\u2202u\/\u2202y, u\u00b7\u2202v\/\u2202x + v\u00b7\u2202v\/\u2202y) \u043f\u043e\u043b\u0443\u0447\u0438\u043c, \u0447\u0442\u043e\u00a0\u0434\u043b\u044f\u00a0\u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0438 (\u0441\u043c. \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u041d\u0430\u0432\u044c\u0435\u2011\u0421\u0442\u043e\u043a\u0441\u0430):\u0430\u00a0\u0434\u043b\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439:\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a\u00a0\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0441\u0430\u043c\u043e\u0439 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432\u043e\u0442 \u0447\u0442\u043e:\u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u00a0\u0441\u0441\u044b\u043b\u043a\u0435: https:\/\/github.com\/PerKyyling\/AirSimulation\u0430\u0432\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b \u043a\u043e\u0434\u0430 \u0432\u00a0\u0441\u0442\u0430\u0442\u044c\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u00a0\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u00a0\u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u0432\u043e\u00a0\u0431\u043b\u0430\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0443\u00a0\u0432\u0430\u0441 \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043f\u043e\u00a0\u0441\u0441\u044b\u043b\u043a\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u00a0\u0444\u0438\u0437\u0438\u043a\u0438 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a\u00a0\u043f\u0440\u043e\u0433\u0435. \u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0448\u0430\u0431\u043b\u043e\u043d python\u2011\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430\u00a0\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435 arcade (\u0430\u043d\u0430\u043b\u043e\u0433 pygame, \u043d\u043e\u00a0\u043f\u043e\u043b\u0435\u0433\u0447\u0435):import arcadeWIDTH = 1000HEIGHT = 1000TITLE = &#171;Simulation&#187;CELL_SIZE = 10WHITE = (255, 255, 255)LITE_BLUE = (200, 230, 255)# \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u043e\u0442 arcade.Windowclass Window(arcade.Window):    # \u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0435\u043c init \u043a\u043b\u0430\u0441\u0441\u0430    def __init__(self, width, height, title):        super().__init__(width, height, title)    # on_update \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u043e\u0439    def on_update(self, delta_time):      pass    # \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f    def on_draw(self):      self.clear()def main():    sm = Window(WIDTH, HEIGHT, TITLE)    arcade.run()if __name__ == &#171;__main__&#187;:    main()\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e\u00a0\u043d\u0430\u0448\u0435 \u0442\u0435\u043b\u043e\u00a0\u2014 \u043a\u0432\u0430\u0434\u0440\u0430\u0442, \u043e\u043d\u043e \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e V = 10\u00a0\u043c\/\u0441. \u0412\u043e\u0437\u0434\u0443\u0445 \u043f\u043e\u043a\u043e\u0438\u0442\u0441\u044f.\u0422\u043e\u0433\u0434\u0430, \u0435\u0441\u043b\u0438 \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043e\u0442\u0441\u0447\u0435\u0442\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441\u00a0\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u043c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c, \u0447\u0442\u043e\u00a0\u0432\u043e\u0437\u0434\u0443\u0445 \u0438\u043c\u0435\u0435\u0442 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 10\u00a0\u043c\/\u0441. \u0422\u043e\u0433\u0434\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0432\u0430 numpy\u2011\u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c (u) \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c (v):import arcadeimport numpyWIDTH = 1000HEIGHT = 1000TITLE = &#171;Simulation&#187;CELL_SIZE = 10WHITE = (255, 255, 255)LITE_BLUE = (200, 230, 255)class Window(arcade.Window):    def __init__(self, width, height, title):        super().__init__(width, height, title)        self.background_color = arcade.color.WHITE        self.N = 100        self.V = 10  # \u043c * \u0441^-1        self.u_old = np.full((self.N, self.N), self.V, dtype=np.float32)        self.v_old = np.zeros((self.N, self.N), dtype=np.float32)            def on_update(self, delta_time):      pass    def on_draw(self):      self.clear()def main():    sm = Window(WIDTH, HEIGHT, TITLE)    arcade.run()if __name__ == &#171;__main__&#187;:    main()u_old\u00a0\u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u00a0\u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u043c\u0438 (\u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 t = 0\u00a0\u0432\u0441\u0435 u[i][j] = V)v_old\u00a0\u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u00a0\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044f\u043c\u0438, \u043f\u043e\u0442\u043e\u043a \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0435\u043d =&gt; \u0432\u0441\u0435 0\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u00a0\u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 N \u0438 \u043e\u0442\u043a\u0443\u0434\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u044b old, \u043d\u0430\u0447\u043d\u0443 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043f\u043e\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0443.\u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f \u0441\u00a0\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438 \u0432\u00a0init, \u0447\u0442\u043e\u0431\u044b \u043a\u00a0\u043d\u0438\u043c \u043d\u0435\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f:    def __init__(self, width, height, title):        super().__init__(width, height, title)        self.background_color = arcade.color.WHITE        self.N = 100        self.V = 10  # \u043c * \u0441^-1        self.dx = 0.001        self.dy = 0.001        self.dt = 0.0000625        self.u_old = np.full((self.N, self.N), self.V, dtype=np.float32)        self.u_new = np.zeros((self.N, self.N), dtype=np.float32)        self.v_old = np.zeros((self.N, self.N), dtype=np.float32)        self.v_new = np.zeros((self.N, self.N), dtype=np.float32)        # \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430        self.collision = np.zeros((self.N, self.N), dtype=np.float32)        self.p = np.zeros((self.N, self.N), dtype=np.float32)        self.p_old = np.zeros((self.N, self.N), dtype=np.float32)        #\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u043e\u0448\u043b\u043e        self.time_total = 0        # \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430        self.left_border = 40   # X_min        self.right_border = 60  # X_max        self.low_border = 40    # Y_min        self.up_border = 60     # Y_max        self.rho = 1.225 \/ 10 ** 6        # \u043f\u043e\u043a\u0430 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e        self.epsilon = 1e-3        self.max_disp = 0        # \u0441\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c 1 \u0432 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0430\u043c \u0432\u0441\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438        for j in range(self.low_border, self.up_border):          for i in range(self.left_border, self.right_border):              self.v_old[j][i] = 0              self.u_old[j][i] = 0              self.collision[j][i] = 1        # \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0435\u0441\u0442\u044c \u043b\u0438 \u043e\u0431\u044c\u0435\u043a\u0442 \u0432 \u043a\u043b\u0435\u0442\u043a\u0435 (i, j), \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442\u044c:        # if self.collision[i][j] == 1\u041c\u044b \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u043c 1\u043c^3, \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043a\u0430\u043c\u0438\u00a0\u2014 dx, dy (1\u00a0\u0441\u043c), \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 dt (625\u00a0* 10^-7), p\u00a0\u2014 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u0439, \u043e\u00a0\u043d\u0435\u043c \u043f\u043e\u0437\u0436\u0435, rho\u00a0\u2014 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0445\u0430.\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b old \u0438 new, \u043d\u0430\u0448\u0430 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e: \u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 t = t0, \u043c\u044b \u0438\u043c\u0435\u043b\u0438 \u0432\u0441\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0441\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 old, \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0448\u043b\u043e dt \u0438 \u043d\u0430\u0448\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043f\u043e\u00a0\u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c \u043d\u0430\u00a0new \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 t = t1. \u0422\u043e\u0433\u0434\u0430 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u043a\u00a0\u0441\u0442\u0430\u0440\u044b\u0439 \u0438 \u043f\u043e\u0441\u043b\u0435 \u0432\u0442\u043e\u0440\u043e\u0433\u043e dt \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e\u00a0\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e, \u0442\u0430\u043a \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0437\u043d\u0430\u044f \u0441\u0442\u0430\u0440\u044b\u0439.\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0432\u0435\u043a\u0446\u0438\u0438. \u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u043c \u043d\u0430\u0448\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u043a\u043e\u043d\u0432\u0435\u043a\u0446\u0438\u0438 \u0432\u00a0\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b. (i\u00a0\u2014 \u0441\u0442\u0440\u043e\u043a\u0430, j\u00a0\u2014 \u0441\u0442\u043e\u043b\u0431\u0435\u0446)\u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u00a0\u043e\u0441\u0438 OX:\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u0432:\u0442\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438:\u043e\u0442\u043a\u0443\u0434\u0430 \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u044c \u0438 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c 2\u00a0\u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u00a0\u043d\u0430\u0448 \u043a\u043e\u0434:    # \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u043d\u0438\u043a\u0430\u0442\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442, \u0435\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c    def zeroingCollisionSpeed(self):        for j in range(self.low_border, self.up_border):            for i in range(self.left_border, self.right_border):                self.u_old[j][i] = 0                self.v_old[j][i] = 0        def speedTransmission(self):        # \u0434\u043b\u044f \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u0438  \u043e\u0442\u043b\u0430\u0434\u043a\u0435 \u0432\u0440\u043e\u0434\u0435 \u0431\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0443\u043b\u0435\u0442\u0430\u043b\u043e        for j in range(self.low_border, self.up_border):            for i in range(self.left_border, self.right_border):                self.u_new[j][i] = 0                self.v_new[j][i] = 0        # \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432 \u0441\u043b\u0435\u0434. \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438        for j in range(1, self.N &#8212; 1):            for i in range(1, self.N &#8212; 1):                if self.collision[j][i] == 1:                    continue                if self.u_old[j][i] &gt; 0:                    dudx = (self.u_old[j][i] &#8212; self.u_old[j][i-1]) \/ self.dx                else:                    dudx = (self.u_old[j][i+1] &#8212; self.u_old[j][i]) \/ self.dx                if self.v_old[j][i] &gt; 0:                    dudy = (self.u_old[j][i] &#8212; self.u_old[j-1][i]) \/ self.dy                else:                    dudy = (self.u_old[j+1][i] &#8212; self.u_old[j][i]) \/ self.dy                self.u_new[j][i] = self.u_old[j][i] &#8212; self.dt * (                        self.u_old[j][i] * dudx + self.v_old[j][i] * dudy)                if self.u_old[j][i] &gt; 0:                    dvdx = (self.v_old[j][i] &#8212; self.v_old[j][i-1]) \/ self.dx                else:                    dvdx = (self.v_old[j][i+1] &#8212; self.v_old[j][i]) \/ self.dx                if self.v_old[j][i] &gt; 0:                    dvdy = (self.v_old[j][i] &#8212; self.v_old[j-1][i]) \/ self.dy                else:                    dvdy = (self.v_old[j+1][i] &#8212; self.v_old[j][i]) \/ self.dy                self.v_new[j][i] = self.v_old[j][i] &#8212; self.dt * (                        self.u_old[j][i] * dvdx + self.v_old[j][i] * dvdy)        # \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f &#8212; \u0432\u043e\u0437\u0434\u0443\u0445 \u0432\u043b\u0435\u0442\u0430\u0435\u0442 \u0441\u043b\u0435\u0432\u0430        self.u_new[:, 0] = self.V        self.v_new[:, 0] = 0        # \u0438 \u0443\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u043e&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-484530","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/484530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=484530"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/484530\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=484530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=484530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=484530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}