{"id":366359,"date":"2024-05-21T02:57:33","date_gmt":"2024-05-21T02:57:33","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=366359"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=366359","title":{"rendered":"<span>\u041f\u0438\u0448\u0435\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043b\u0443\u0447\u0435\u0439 \u0434\u043b\u044f ZX Spectrum<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/968\/5b8\/c4d\/9685b8c4df65ce17443b3845b35b89f8.png\" width=\"1300\" height=\"1073\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/968\/5b8\/c4d\/9685b8c4df65ce17443b3845b35b89f8.png\"\/><\/figure>\n<p>\u042f \u043b\u044e\u0431\u043b\u044e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u043b\u0443\u0447\u0435\u0439 \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u043b \u0438\u043c <a href=\"https:\/\/gabrielgambetta.com\/computer-graphics-from-scratch\/02-basic-raytracing.html\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0441\u0432\u043e\u0435\u0439 \u043a\u043d\u0438\u0433\u0438<\/a>. \u041c\u0435\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u043c\u043e\u044f \u043b\u044e\u0431\u043e\u0432\u044c \u043a <a href=\"https:\/\/en.wikipedia.org\/wiki\/ZX_Spectrum\" rel=\"noopener noreferrer nofollow\">ZX Spectrum<\/a> \u2014 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u043c\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 1982 \u0433\u043e\u0434\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u0432\u044b\u0440\u043e\u0441 \u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0441\u044f \u043c\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e. \u041f\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u044d\u0442\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0441\u0442\u043e\u043b\u044c \u0441\u043c\u0435\u0445\u043e\u0442\u0432\u043e\u0440\u043d\u043e \u0441\u043b\u0430\u0431\u0430 (\u0438 \u0434\u0430\u0436\u0435 \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c 1980-\u0445), \u0447\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0432 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043b\u0443\u0447\u0435\u0439 \u0438\u0437 \u043a\u043d\u0438\u0433\u0438 Computer Graphics from Scratch \u043d\u0430 ZX Spectrum?<\/p>\n<p>\u0412 ZX Spectrum \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 Z80 \u043d\u0430 3,5 \u041c\u0413\u0446 (\u0432 \u0442\u044b\u0441\u044f\u0447\u0443 \u0440\u0430\u0437 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u0430 (!!!), \u0438 48 \u041a\u0411 \u041e\u0417\u0423 (\u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435); \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c 256&#215;176 (\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0434\u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f), \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c 15 \u0446\u0432\u0435\u0442\u043e\u0432 (\u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438). [\u041f\u0440\u0438\u043c. \u043f\u0435\u0440.: \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438\u043c\u0435\u043b \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 256&#215;192, \u043d\u043e \u0432 Basic \u0431\u044b\u043b\u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u0432\u0435 \u043d\u0438\u0436\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 \u043f\u043e 8 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f <a class=\"mention\" href=\"\/users\/ermouth\">@ermouth<\/a> \u0438 <a class=\"mention\" href=\"\/users\/mobi\">@mobi<\/a>.] \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e CPU!<\/p>\n<p>\u042f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 Sinclair BASIC \u2014 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Spectrum. \u042d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e BASIC, \u0430 \u0434\u0440\u0435\u0432\u043d\u0438\u0439, \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u0438\u0430\u043b\u0435\u043a\u0442 BASIC. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043d\u0451\u043c \u2014 \u044d\u0442\u043e <code>FOR<\/code>\u00a0\u0438 <code>IF<\/code>\u00a0(\u0430 \u0443 <code>IF<\/code>\u00a0\u043d\u0435\u0442 <code>ELSE<\/code>\u00a0\u0438 \u0434\u0430\u0436\u0435 <code>ENDIF<\/code>); \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b; \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u043e\u043b\u044c\u043a\u043e <code>GO TO<\/code>\u00a0\u0438 <code>GO SUB<\/code>; \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u0435\u0440\u0445\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439. \u041d\u043e, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043e\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435! \u0415\u0441\u043b\u0438 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435.<\/p>\n<p>\u042f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0441\u0440\u0435\u0434\u0443: \u043a\u043e\u0434 \u043d\u0430 BASIC \u044f \u043f\u0438\u0448\u0443 \u0432 VS Code, \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/speccyorg\/bas2tap\" rel=\"noopener noreferrer nofollow\">BAS2TAP<\/a> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 <a href=\"https:\/\/fuse-emulator.sourceforge.net\/\" rel=\"noopener noreferrer nofollow\">FUSE<\/a>. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044f \u043d\u0435 \u043f\u0438\u0441\u0430\u043b \u043d\u0430 BASIC \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u043b\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b \u0443\u0434\u0438\u0432\u043b\u0451\u043d, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u0441\u0451 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b. \u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u044d\u0442\u0438\u043c, \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u0441 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0434\u043e \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u044d\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432 \u043c\u043e\u0437\u0433\u0443 \u043a\u0430\u043a \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u044b \u0438\u0437\u0443\u0447\u0430\u0435\u043c \u0432 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f\u0437\u044b\u043a\u0438 \u0438 \u0430\u043a\u0446\u0435\u043d\u0442\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043d\u0430 \u0434\u0432\u043e\u0440\u0435 1984 \u0433\u043e\u0434!<\/p>\n<h3>\u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f: \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043b\u0443\u0447\u0435\u0439<\/h3>\n<p>\u041c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b <a href=\"https:\/\/gabrielgambetta.com\/computer-graphics-from-scratch\/02-basic-raytracing.html#rendering-our-first-spheres\" rel=\"noopener noreferrer nofollow\">\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043b\u0443\u0447\u0435\u0439 CGFS<\/a>\u00a0\u043d\u0430 BASIC, \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u044b\u0432\u043e\u0434\u0438\u043b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 32&#215;22 \u0431\u043b\u043e\u043a\u0430. \u041a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0432\u0441\u0451 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eb2\/67f\/ad9\/eb267fad972041505c10356578b4f7e3.png\" width=\"1300\" height=\"1073\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eb2\/67f\/ad9\/eb267fad972041505c10356578b4f7e3.png\"\/><\/figure>\n<p>\u0427\u0438\u0441\u043b\u043e \u0432 \u043b\u0435\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 (879.76) \u2014 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0414\u0430, \u043f\u043e\u0447\u0442\u0438 15 \u043c\u0438\u043d\u0443\u0442. \u0410 \u0432\u043e\u0442 \u0442\u0430 \u0436\u0435 \u0441\u0446\u0435\u043d\u0430, \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0435\u043d\u043d\u0430\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c \u043b\u0443\u0447\u0435\u0439 CGFS \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u0439 \u0436\u0435 \u0441\u0446\u0435\u043d\u044b \u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/65d\/bcd\/b35\/65dbcdb352e806e3b5ac8d05f62f991d.png\" width=\"600\" height=\"412\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/65d\/bcd\/b35\/65dbcdb352e806e3b5ac8d05f62f991d.png\"\/><\/figure>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043b\u044f Spectrum \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434:<\/p>\n<pre><code>   1 BRIGHT 1: CLS     5 LET ROX = 0    6 LET ROY = 0    7 LET ROZ = 0    8 LET TMIN = 0    9 LET TMAX = 10000    10 FOR X = 0 TO 31   20   FOR Y = 0 TO 21    30     LET RDX = (X - 16) \/ 32   31     LET RDY = (11 - Y) \/ 32   32     LET RDZ = 1    40     GO SUB 1000    50     PAPER COL   51     PRINT AT Y, X; \" \"   100   NEXT Y  105   GO SUB 3000: PRINT AT 0, 0; TIME  110 NEXT X   120 STOP   1000 REM ===== TraceRay ===== 1001 REM Params: (ROX, ROY, ROZ): ray origin; (RDX, RDY, RDZ): ray direction; (TMIN, TMAX): wanted ranges of t 1002 REM Returns: COL: pixel color  1010 LET COL = -1: LET MINT = 0  1100 RESTORE 9000 1101 READ NS 1102 FOR S = 1 TO NS  1110    READ SCX, SCY, SCZ, SRAD, SCOL  1200    LET COX = ROX - SCX 1201    LET COY = ROY - SCY 1202    LET COZ = ROZ - SCZ  1210    LET EQA = RDX*RDX + RDY*RDY + RDZ*RDZ 1211    LET EQB = 2*(RDX*COX + RDY*COY + RDZ*COZ) 1212    LET EQC = (COX*COX + COY*COY + COZ*COZ) - SRAD*SRAD  1220    LET DISC = EQB*EQB - 4*EQA*EQC 1230    IF DISC &lt; 0 THEN GO TO 1500  1240    LET T1 = (-EQB + SQR(DISC)) \/ 2*EQA 1241    LET T2 = (-EQB - SQR(DISC)) \/ 2*EQA  1250    IF T1 >= TMIN AND T1 &lt;= TMAX AND (T1 &lt; MINT OR COL = -1) THEN LET COL = SCOL: LET MINT = T1 1300    IF T2 >= TMIN AND T2 &lt;= TMAX AND (T2 &lt; MINT OR COL = -1) THEN LET COL = SCOL: LET MINT = T2  1500 NEXT S  1999 IF COL = -1 THEN LET COL = 0 2000 RETURN  3000 REM ===== Get timestamp in seconds ===== 3001 LET TIME = (65536*PEEK 23674 + 256*PEEK 23673 + PEEK 23672) \/ 50 3002 RETURN  8998 REM ===== Sphere data ===== 8999 REM Sphere count, followed by (SCX, SCY, SCZ, SRAD, COLOR) 9000 DATA 4 9001 DATA  0, -1, 4, 1, 2 9002 DATA  2,  0, 4, 1, 1 9003 DATA -2,  0, 4, 1, 4 9004 DATA 0, -5001, 0, 5000, 6<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438 \u043b\u0443\u0447\u0435\u0439 \u0438 \u0441 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c CGFS \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0430\u043c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0430, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 \u0434\u0440\u0435\u0432\u043d\u0435\u043c \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0435 BASIC. \u041d\u043e \u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e \u043a\u043e\u0434\u0443, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 Spectrum.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a. \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0438\u043c\u0435\u0442\u044c \u043d\u043e\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>GO TO<\/code>\u00a0\u0438\u043b\u0438 <code>GO SUB<\/code>. \u0412 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435\u043c, \u0447\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>IF ... THEN<\/code>, \u0432\u0435\u0434\u044c \u0432 <code>END IF<\/code> \u0432 \u044d\u0442\u043e\u043c \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442!<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432\u0440\u0430\u0437\u0431\u0440\u043e\u0441. \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 Spectrum BASIC \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0442\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a \u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043c\u0435\u043d\u044f\u0442\u044c, \u044d\u0442\u043e \u0431\u044b\u043b \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438, \u043a\u0440\u0430\u0442\u043d\u044b\u043c\u0438 10, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u00ab\u043c\u0435\u0441\u0442\u043e\u00bb \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>\u041c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<pre><code>1 BRIGHT 1: CLS<\/code><\/pre>\n<p>\u0412 Spectrum \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043d\u0451\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u0430 \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e <code>BRIGHT 1<\/code>\u00a0\u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u044f\u0440\u043a\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u0430\u043b\u0438\u0442\u0440\u044b, \u0430 <code>CLS<\/code>\u00a0\u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u044d\u043a\u0440\u0430\u043d. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0451\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430:<\/p>\n<pre><code>  5 LET ROX = 0   6 LET ROY = 0   7 LET ROZ = 0   8 LET TMIN = 0   9 LET TMAX = 10000   10 FOR X = 0 TO 31  20   FOR Y = 0 TO 21   30     LET RDX = (X - 16) \/ 32  31     LET RDY = (11 - Y) \/ 32  32     LET RDZ = 1   40     GO SUB 1000   50     PAPER COL  51     PRINT AT Y, X; \" \"  100   NEXT Y 105   GO SUB 3000: PRINT AT 0, 0; TIME 110 NEXT X  120 STOP<\/code><\/pre>\n<p>\u0412 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0441 5 \u043f\u043e 9 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430. \u0412 BASIC \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u043d\u043e \u0441 \u043d\u0438\u043c\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u043a \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430 <code>RO<\/code>\u00a0\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0442\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 <code>ROX<\/code>,\u00a0<code>ROY<\/code>\u00a0\u0438 <code>ROZ<\/code>.<\/p>\n<p>\u0412 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0441 10 \u043f\u043e 110 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b, \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043e\u0431\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0445\u043e\u043b\u0441\u0442 (32&#215;22 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430). \u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430, \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432, \u0441\u0442\u0440\u043e\u043a\u0430 105 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:\u00a0<code>GO SUB 3000<\/code>\u00a0\u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u043f\u043e\u0442\u043e\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a \u043f\u043e\u0434\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 (<em>subroutine<\/em>)\u00a0\u0432 \u0441\u0442\u0440\u043e\u043a\u0435 3000:<\/p>\n<pre><code>3000 REM ===== Get timestamp in seconds ===== 3001 LET TIME = (65536*PEEK 23674 + 256*PEEK 23673 + PEEK 23672) \/ 50 3002 RETURN<\/code><\/pre>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 3000 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 <code>REM<\/code> (\u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 remark, \u00ab\u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435\u00bb). \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u00ab\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438\u00bb, \u043d\u043e ZX Spectrum \u2014 \u0431\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0443\u043c\u0430 \u0431\u0435\u0437\u0443\u043c\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u0438\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Clive_Sinclair\" rel=\"noopener noreferrer nofollow\">\u0441\u044d\u0440\u0430 \u041a\u043b\u0430\u0439\u0432\u0430 \u0421\u0438\u043d\u043a\u043b\u0435\u0440\u0430<\/a>. \u0422\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439.<\/p>\n<p>\u041c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0430\u043a\u043b\u0438\u043d\u0430\u043d\u0438\u0435 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 3001 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u041a\u0430\u043a?\u00a0<code>PEEK<\/code>\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435. \u042d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043b\u0438\u0448\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0435\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 24-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a <code>FRAME<\/code>; \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0433\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 20 \u043c\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0434\u0435\u043b\u0438\u043c \u0435\u0433\u043e \u043d\u0430 50, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>TIME<\/code>.<\/p>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>RETURN<\/code>\u00a0\u0432 \u0441\u0442\u0440\u043e\u043a\u0435 3002 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0432\u0448\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u00ab\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>TIME<\/code>. \u042d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c <code>GO SUB<\/code>\u00a0\/\u00a0<code>RETURN<\/code>\u00a0\u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 <code>CALL<\/code>\u00a0\/\u00a0<code>RET<\/code>\u00a0\u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435.<\/p>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 120 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0446\u0438\u043a\u043b. \u0421\u0442\u0440\u043e\u043a\u0438 \u0441 30 \u043f\u043e 32 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0445\u043e\u043b\u0441\u0442\u0430 \u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u043e\u0447\u043a\u0438 \u043e\u0431\u0437\u043e\u0440\u0430 (<code>CanvasToViewport<\/code>\u00a0\u0432 CGFS). \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0430 \u0437\u0430\u0434\u0430\u043d\u043e <code>(RDX, RDY, RDZ)<\/code>.<\/p>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 40 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u00ab\u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00bb; \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044d\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 <code>TraceRay<\/code>. \u041a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0442, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>COL<\/code>\u00a0\u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0446\u0432\u0435\u0442 \u0442\u043e\u0433\u043e, \u0441 \u0447\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u043b\u0443\u0447.<\/p>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 50 \u0438 51 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442 \u0431\u043b\u043e\u043a. \u042d\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u0435\u043c \u0446\u0432\u0435\u0442\u0430 <code>PAPER<\/code>\u00a0(\u0444\u043e\u043d\u0430) \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435).<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c <code>TraceRay<\/code>, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 1000. \u041e\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0431\u043b\u043e\u043a\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code>1000 REM ===== TraceRay ===== 1001 REM Params: (ROX, ROY, ROZ): ray origin; (RDX, RDY, RDZ): ray direction; (TMIN, TMAX): wanted ranges of t 1002 REM Returns: COL: pixel color<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0432\u0441\u0451 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e, \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u0438 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0451\u043d\u043d\u043e\u0441\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 \u044d\u0442\u043e <code>(ROX, ROY, ROZ)<\/code>,\u00a0<code>(RDX, RDY, RDZ)<\/code>,\u00a0<code>TMIN<\/code>\u00a0\u0438 <code>TMAX<\/code>, \u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>COL<\/code>. \u041e\u043d\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u0430\u043b\u0438\u0442\u0440\u0435 ZX Spectrum.<\/p>\n<p>\u0412 \u0441\u0442\u0440\u043e\u043a\u0435 1010 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u0446\u0432\u0435\u0442\u0430 \u0441\u0444\u0435\u0440\u044b \u0432 \u043c\u0435\u0441\u0442\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>1010 LET COL = -1: LET MINT = 0<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u00ab\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0444\u0435\u0440\u044b\u00bb:<\/p>\n<pre><code>1100 RESTORE 9000 1101 READ NS 1102 FOR S = 1 TO NS 1110    READ SCX, SCY, SCZ, SRAD, SCOL<\/code><\/pre>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 1100 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u00ab\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 9000, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u044b:<\/p>\n<pre><code>8998 REM ===== Sphere data ===== 8999 REM Sphere count, followed by (SCX, SCY, SCZ, SRAD, COLOR) 9000 DATA 4 9001 DATA  0, -1, 4, 1, 2 9002 DATA  2,  0, 4, 1, 1 9003 DATA -2,  0, 4, 1, 4 9004 DATA  0, -5001, 0, 5000, 6<\/code><\/pre>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>READ<\/code>\u00a0\u0432 \u0441\u0442\u0440\u043e\u043a\u0435 1101 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0447\u0438\u0441\u043b\u043e 4 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 9000) \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e NS. \u0417\u0430\u0442\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0430 1102 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0446\u0438\u043a\u043b \u00ab\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0444\u0435\u0440\u044b\u00bb, \u0438 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 1110 \u2014 \u044d\u0442\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 5 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0441\u0444\u0435\u0440\u0443. \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 <code>READ<\/code>\u00a0\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 9002, \u0433\u043e\u0442\u043e\u0432\u043e\u043c \u043a \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 \u0441 1200 \u043f\u043e 1300 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 <a href=\"https:\/\/gabrielgambetta.com\/computer-graphics-from-scratch\/02-basic-raytracing.html#ray-meets-sphere\" rel=\"noopener noreferrer nofollow\">\u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043b\u0443\u0447\u0430 \u0441\u043e \u0441\u0444\u0435\u0440\u043e\u0439<\/a>, \u0430 \u0441\u0442\u0440\u043e\u043a\u0438 1250 \u0438 1300 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e\u0442 \u0441\u0430\u043c\u043e\u0435 \u0431\u043b\u0438\u0436\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code>1200    LET COX = ROX - SCX 1201    LET COY = ROY - SCY 1202    LET COZ = ROZ - SCZ 1210    LET EQA = RDXRDX + RDYRDY + RDZRDZ 1211    LET EQB = 2(RDXCOX + RDYCOY + RDZCOZ) 1212    LET EQC = (COXCOX + COYCOY + COZCOZ) - SRAD*SRAD 1220    LET DISC = EQBEQB - 4EQA*EQC 1230    IF DISC &lt; 0 THEN GO TO 1500 1240    LET T1 = (-EQB + SQR(DISC)) \/ 2EQA 1241    LET T2 = (-EQB - SQR(DISC)) \/ 2EQA 1250    IF T1 >= TMIN AND T1 &lt;= TMAX AND (T1 &lt; MINT OR COL = -1) THEN LET COL = SCOL: LET MINT = T1 1300    IF T2 >= TMIN AND T2 &lt;= TMAX AND (T2 &lt; MINT OR COL = -1) THEN LET COL = SCOL: LET MINT = T2<\/code><\/pre>\n<p>\u041c\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0446\u0438\u043a\u043b, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439; \u0435\u0441\u043b\u0438 \u0438\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e, \u0442\u043e \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 0 (\u0447\u0451\u0440\u043d\u044b\u0439) \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0442:<\/p>\n<pre><code>1999 IF COL = -1 THEN LET COL = 0 2000 RETURN<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451. \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u0432\u0435\u0440\u0445\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441 \u0443\u043b\u044c\u0442\u0440\u0430\u043d\u0438\u0437\u043a\u0438\u043c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/522\/88f\/dd2\/52288fdd2eb7df8a37d465036af3583c.png\" width=\"1300\" height=\"1073\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/522\/88f\/dd2\/52288fdd2eb7df8a37d465036af3583c.png\"\/><\/figure>\n<p>\u041c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0438\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u043f\u044f\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0441\u0442\u0440\u043e\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u043c\u0430\u043b\u043e\u043c\u043e\u0449\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 80-\u0445!<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u043d\u0430\u0447\u0430\u043b\u043e. \u0417\u0430\u0447\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 32&#215;22, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 256&#215;176 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u044d\u043a\u0440\u0430\u043d\u0430?<\/p>\n<h3>\u0412\u0442\u043e\u0440\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f: \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u044b\u0448\u0435 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432<\/h3>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0441 32&#215;22 \u043d\u0430 256&#215;176 \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>PLOT<\/code>\u00a0\u0432\u043c\u0435\u0441\u0442\u043e \u0431\u043b\u043e\u0447\u043d\u044b\u0445 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>PRINT<\/code>. \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432 64 \u0440\u0430\u0437 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 (16 \u0447\u0430\u0441\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e 15 \u043c\u0438\u043d\u0443\u0442), \u043d\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0431\u044b&#8230; \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u0447\u0435\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 ZX Spectrum!<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f ZX Spectrum \u0438\u043c\u0435\u043b\u0430 \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e 16 \u041a\u0411 \u041e\u0417\u0423, \u0442\u0430\u043a \u0447\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e\u0439 \u0431\u044b\u043b\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 (\u043c\u043d\u0435 \u043a\u0443\u043f\u0438\u043b\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u043a\u0430\u0440\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0441 48 \u041a\u0411). \u0414\u043b\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0438\u0434\u0435\u043e-\u041e\u0417\u0423 \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043e \u043d\u0430 \u0434\u0432\u0430 \u0431\u043b\u043e\u043a\u0430: \u0431\u043b\u043e\u043a \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0438\u0442\u0443 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c, \u0438 \u0431\u043b\u043e\u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u043d\u0430 \u0431\u043b\u043e\u043a \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 8&#215;8. \u0411\u043b\u043e\u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043c\u043e\u0433 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u043c\u0443 \u0431\u043b\u043e\u043a\u0443 \u0434\u0432\u0430 \u0446\u0432\u0435\u0442\u0430, \u043d\u0430\u0437\u044b\u0432\u0430\u0432\u0448\u0438\u0445\u0441\u044f <code>INK<\/code>\u00a0(\u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0439 \u043f\u043b\u0430\u043d) \u0438 <code>PAPER<\/code>\u00a0(\u0444\u043e\u043d).<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>PLOT<\/code>\u00a0\u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438\u043b\u0438 \u0441\u0431\u0440\u043e\u0441\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044e \u0431\u0438\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0439\u043c\u0451\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0434\u0432\u0443\u0445 \u0446\u0432\u0435\u0442\u043e\u0432, \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c\u044b\u0445 \u044d\u0442\u043e\u043c\u0443 \u0431\u043b\u043e\u043a\u0443.\u00a0<strong>\u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 8&#215;8 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u0434\u0432\u0430 \u0446\u0432\u0435\u0442\u0430, \u043d\u043e \u043d\u0435 \u0442\u0440\u0438 \u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435<\/strong>.<\/p>\n<p>\u0412\u0441\u0451 \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0442\u043e\u0436\u0435 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 8&#215;8, \u043d\u043e \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0438\u0433\u0440, \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435\u043c. \u042d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0434\u0430\u0451\u0442 \u0438\u0433\u0440\u0430\u043c \u0434\u043b\u044f Spectrum \u0438\u0445 \u043e\u0447\u0435\u043d\u044c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u0443\u044e \u044d\u0441\u0442\u0435\u0442\u0438\u043a\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0435\u0433\u043e, \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u044f \u044d\u043a\u0440\u0430\u043d\u044b \u0438 \u0441\u043f\u0440\u0430\u0439\u0442\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0435\u043d\u044b \u043f\u043e \u0441\u0435\u0442\u043a\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 8&#215;8, \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f \u0432 \u043f\u043e\u043b\u043d\u044b\u0439 \u043c\u043e\u043d\u043e\u0445\u0440\u043e\u043c, \u0438\u043b\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044f \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u2014 \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0435\u043c\u044b\u0439 \u0444\u0430\u043a\u0442.<\/p>\n<p>\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0443 \u043b\u0443\u0447\u0435\u0439. \u041f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043b\u0435\u0433\u043a\u043e. \u0423\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0443\u0436\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435.<\/p>\n<p>\u0418\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0435\u0442: \u0447\u0442\u043e \u0431\u044b \u044f \u043d\u0438 \u0434\u0435\u043b\u0430\u043b, \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u043b\u043e\u043a 8&#215;8 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0434\u0432\u0443\u043c\u044f \u0446\u0432\u0435\u0442\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0438. \u042f \u0441\u043e\u0431\u0438\u0440\u0430\u044e \u0446\u0432\u0435\u0442\u0430, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0431\u043b\u043e\u043a\u0435 8&#215;8, \u043d\u0430\u0445\u043e\u0436\u0443 \u0434\u0432\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u0446\u0432\u0435\u0442\u043e\u0432.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u043b\u043e\u043a\u043e\u0432 8&#215;8, \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0446\u0438\u043a\u043b:<\/p>\n<pre><code> 10 FOR X = 0 TO 255 STEP 8  20   FOR Y = 0 TO 175 STEP 8  ...  500   NEXT Y 505   GO SUB 3000: PRINT AT 0, 0; TIME 510 NEXT X 520 STOP<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u0443\u0435\u043c 64 \u043b\u0443\u0447\u0430, \u0441\u043e\u0431\u0438\u0440\u0430\u044f \u0446\u0432\u0435\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432:<\/p>\n<pre><code> 30      DIM C(64)  31      LET CI = 1  32      DIM A(8)  120     REM --- For each 8x8 block, collect the pixel colors and their counts --- 125     FOR U = X TO X+7 126       FOR V = Y TO Y+7  130         LET RDX = (U - 128) \/ 256 131         LET RDY = (V - 88) \/ 256 132         LET RDZ = 1  140         GO SUB 1000 141         LET C(CI) = COL 142         LET CI = CI + 1 143         LET A(COL+1) = A(COL+1) + 1  160       NEXT V 161     NEXT U<\/code><\/pre>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 30\u00a0\u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>DIM<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>C<\/code>\u00a0\u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 64 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0418\u043d\u0434\u0435\u043a\u0441\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 1, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0440\u043e\u043a\u0430 31 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 <code>CI<\/code>\u00a0(\u0438\u043d\u0434\u0435\u043a\u0441 <code>C<\/code>) \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 1. \u0421\u0442\u0440\u043e\u043a\u0430 32 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043c\u0430\u0441\u0441\u0438\u0432 <code>A<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0432\u0435\u0442\u043e\u0432.<\/p>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 \u0441 140 \u043f\u043e 143 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 <code>TraceRay<\/code>\u00a0\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0435\u0451 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b: \u0446\u0432\u0435\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u0432 <code>C<\/code>, \u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0446\u0432\u0435\u0442\u043e\u0432 \u2014 \u0432 <code>A<\/code>. \u0426\u0432\u0435\u0442\u0430 \u0438\u043c\u0435\u044e\u0442 \u043d\u043e\u043c\u0435\u0440\u0430 \u043e\u0442 0 \u0434\u043e 7, \u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u2014 \u043e\u0442 1 \u0434\u043e 8, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 <code>COL+1<\/code>.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u044b\u0439 \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0446\u0432\u0435\u0442\u0430:<\/p>\n<pre><code>199     REM --- Find the most and second most frequent colors in this 8x8 block --- 201     LET MFC = 0 202     FOR C = 1 TO 8 203       IF A(C) > MFC THEN LET MFC = A(C): LET MFI = C 204     NEXT C 205     LET FCOL = MFI - 1  207     LET II = MFI: LET MFC = 0: LET MFI = 0 208     FOR C = 1 TO 8 209       IF C &lt;> II AND A(C) > MFC THEN LET MFC = A(C): LET MFI = C 210     NEXT C 211     LET SCOL = MFI - 1<\/code><\/pre>\n<p>\u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u0438. \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0438\u0441\u0443\u0435\u043c \u0431\u043b\u043e\u043a:<\/p>\n<pre><code>259     REM --- If there's only one color, paint the whole block -- 260     IF SCOL &lt;> -1 THEN GO TO 300 270     POKE 22528 + X\/8 + 32*(21-Y\/8), 64 + FCOL * 8 280     GO TO 500<\/code><\/pre>\n<p>\u041d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>POKE<\/code>.\u00a0<code>POKE<\/code>\u00a0\u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u0431\u0430\u0439\u0442 \u0432 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u043c\u044f\u0442\u0438. \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u2014 \u044d\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430 8&#215;8 \u0432 \u0431\u043b\u043e\u043a\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432. \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0431\u0430\u0439\u0442, \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f INK \u0438 PAPER \u2014 \u044d\u0442\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 INK \u0441\u043e \u0441\u0434\u0432\u0438\u0433\u043e\u043c \u0432\u043b\u0435\u0432\u043e \u043d\u0430 3 \u0431\u0438\u0442\u0430 \u043f\u043b\u044e\u0441 \u0431\u0438\u0442 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 BRIGHT.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435 \u0432\u0441\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0426\u0432\u0435\u0442\u0443 PAPER \u0431\u043b\u043e\u043a\u0430 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u044b\u0439 \u0446\u0432\u0435\u0442 (\u0447\u0442\u043e\u0431\u044b \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439); \u043c\u044b \u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432, \u0438 \u043b\u044e\u0431\u043e\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0441\u0430\u043c\u044b\u043c \u0447\u0430\u0441\u0442\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0446\u0432\u0435\u0442\u043e\u043c INK, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0446\u0432\u0435\u0442:<\/p>\n<pre><code>300     REM --- Otherwise set the PAPER to the most frequent color, and draw everything else in the second most frequent color -- 301     LET CI = 1 310     FOR U = X TO X+7 311       FOR V = Y TO Y+7  320         IF C(CI) &lt;> FCOL THEN PLOT INK SCOL; PAPER FCOL; U, V 321         LET CI = CI + 1  350       NEXT V 351     NEXT U<\/code><\/pre>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/da7\/d10\/91a\/da7d1091a0cff2e6b1cd53da429fcf2b.png\" width=\"1300\" height=\"1073\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/da7\/d10\/91a\/da7d1091a0cff2e6b1cd53da429fcf2b.png\"\/><\/figure>\n<p>\u041d\u043e \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4a3\/3c4\/bda\/4a33c4bda114a0cc3be2e1db02a18827.png\" width=\"982\" height=\"674\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4a3\/3c4\/bda\/4a33c4bda114a0cc3be2e1db02a18827.png\"\/><\/figure>\n<p>\u041d\u0430\u043b\u043e\u0436\u0438\u0432 \u0441\u0435\u0442\u043a\u0443, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0449\u0443\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u043b\u043e\u043a\u043e\u0432, \u043f\u0440\u043e\u0449\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435. \u0414\u0432\u0430 \u0431\u043b\u043e\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u00ab\u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u00bb, \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u0442\u0440\u0451\u0445 \u0446\u0432\u0435\u0442\u043e\u0432: \u0447\u0451\u0440\u043d\u043e\u0433\u043e, \u0436\u0451\u043b\u0442\u043e\u0433\u043e \u0438 \u043b\u0438\u0431\u043e \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e, \u043b\u0438\u0431\u043e \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e. \u041d\u043e Spectrum \u043d\u0430 \u044d\u0442\u043e \u043d\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0434\u0435\u043b\u0430\u043b \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a.<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 <a href=\"https:\/\/gabrielgambetta.com\/zx-raytracer-2-src.html\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439 \u2014 \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 17 \u0447\u0430\u0441\u043e\u0432! \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c 20000%, \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e?<\/p>\n<h3>\u0422\u0440\u0435\u0442\u044c\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f: \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>\u042f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438. \u0412\u043e\u0442, \u0447\u0442\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b:<\/p>\n<ul>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0431\u043b\u043e\u043a\u043e\u0432 8&#215;8 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u0443\u0435\u043c \u043b\u0443\u0447\u0438 \u0432 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0443\u0433\u043b\u0430\u0445, \u0438 \u0435\u0441\u043b\u0438 \u0446\u0432\u0435\u0442 \u0432\u043e \u0432\u0441\u0435\u0445 \u0443\u0433\u043b\u0430\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432, \u0442\u043e \u0437\u0430\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0431\u043b\u043e\u043a \u0446\u0435\u043b\u0438\u043a\u043e\u043c. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043b\u0443\u0447\u0435\u0439 \u043d\u0430 \u0431\u043b\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u043e 64, \u0442\u043e \u0435\u0441\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0432 16 \u0440\u0430\u0437. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043c\u0435\u043b\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0432 \u0431\u043b\u043e\u043a, \u0442\u043e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0438\u0445 \u0443\u043f\u0443\u0441\u0442\u0438\u0442; \u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0441\u0446\u0435\u043d\u044b \u0442\u0430\u043a\u0430\u044f \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041b\u044e\u0431\u043e\u0439 \u0446\u0435\u043d\u043e\u0439 \u0438\u0437\u0431\u0435\u0433\u0430\u0435\u043c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 \u0434\u0435\u043b\u0435\u043d\u0438\u0439. Z80 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e (\u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u0443\u0436\u0435 \u043e \u0434\u0435\u043b\u0435\u043d\u0438\u0438), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 BASIC \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e, \u0430 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u043f\u0438\u0448\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0439. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 (0, 0, 0),\u00a0<code>t_min<\/code>\u00a0\u2014 \u0432\u0441\u0435\u0433\u0434\u0430 0, \u0430 <code>t_max<\/code>\u00a0\u2014 \u0432\u0441\u0435\u0433\u0434\u0430 <code>+inf<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u0417\u0430\u0447\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0434\u0438\u0443\u0441 \u0441\u0444\u0435\u0440\u044b \u0432 \u0432\u0438\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0432\u043e\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0451 \u043a\u0432\u0430\u0434\u0440\u0430\u0442?<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0446\u0438\u043a\u043b\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 X, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e Y, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0430\u0437.<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0442\u0440\u043e\u0438\u043c \u043f\u043e\u0434\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u00ab\u0441\u0430\u043c\u043e\u0433\u043e \u0447\u0430\u0441\u0442\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430\u00bb \u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043d\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0446\u0432\u0435\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u043c\u0435\u043d\u0438\u043c \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b <code>GO SUB<\/code>\u00a0\u043d\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043b\u0430 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 <code>REM<\/code>; \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435 \u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432\u0440\u0435\u043c\u044f!<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u042d\u0442\u043e\u0442 BASIC \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u0441\u044b\u043b\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0438\u0449\u0435\u0442 \u0435\u0451 \u043f\u043e \u0438\u043c\u0435\u043d\u0438\u2026<\/p>\n<\/li>\n<li>\n<p>\u0415\u0449\u0451 \u044f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 <code>DATA<\/code>\u00a0\u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043b\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0441\u043c\u0443\u0442\u043d\u043e\u0435 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0430\u0436\u0435\u043d <em>\u043f\u043e\u0440\u044f\u0434\u043e\u043a<\/em> \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u043b\u0438 \u0435\u0449\u0451 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u0438, \u043d\u043e \u0441\u043d\u0438\u0437\u0438\u043b\u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c, \u0442\u0430\u043a \u0447\u0442\u043e \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0445 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u043c. \u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u043c \u043f\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c, \u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043d\u0438\u0437\u0438\u043b\u043e\u0441\u044c \u0434\u043e \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u043e\u0432 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b9\/09e\/173\/4b909e173be3a7936b1ea169c66190ac.png\" width=\"1300\" height=\"1073\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4b9\/09e\/173\/4b909e173be3a7936b1ea169c66190ac.png\"\/><\/figure>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 <a href=\"https:\/\/gabrielgambetta.com\/zx-raytracer-3-src.html\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<h3>\u0427\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f: \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0432\u0435\u0442\u0430 (\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d)<\/h3>\n<p>\u041f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u044f \u0445\u043e\u0442\u0435\u043b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c; \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0440\u0435\u0434\u044b, \u043c\u043d\u0435 \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0441\u0442\u0430\u043b\u0430 \u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f. <a href=\"https:\/\/gabrielgambetta.com\/computer-graphics-from-scratch\/03-light.html\" rel=\"noopener noreferrer nofollow\">\u0423\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f<\/a>\u00a0\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b, \u043d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u043c \u043d\u0430\u0431\u043e\u0440\u0435 \u0446\u0432\u0435\u0442\u043e\u0432 ZX Spectrum. \u041f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 7 \u0446\u0432\u0435\u0442\u043e\u0432  \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0438 \u044f\u0440\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u043b\u044e\u0441 \u0447\u0451\u0440\u043d\u044b\u0439:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d95\/57d\/7e3\/d9557d7e3ed6b4d4bf1e1f533a266044.png\" width=\"301\" height=\"109\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d95\/57d\/7e3\/d9557d7e3ed6b4d4bf1e1f533a266044.png\"\/><\/figure>\n<p>\u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431\u044b \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u0441\u0432\u0435\u0442\u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435, \u044f \u0431\u044b \u043d\u0435 \u043c\u043e\u0433 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0446\u0432\u0435\u0442 \u0441\u0444\u0435\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u0430\u0442\u0435\u043d\u0451\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442, \u043a\u0430\u043a \u044d\u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0440\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 RGB. \u0427\u0442\u043e \u0436\u0435 \u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438\u0434\u0442\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u044b. \u042f \u043c\u043e\u0433\u0443 \u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0442\u0435\u043d\u043a\u0438 \u0446\u0432\u0435\u0442\u043e\u0432, \u043f\u0435\u0440\u0435\u043c\u0435\u0436\u0430\u044f \u0432 \u043d\u0443\u0436\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0446\u0432\u0435\u0442 \u0438 \u0447\u0451\u0440\u043d\u044b\u0439 \u0444\u043e\u043d. \u041c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 8&#215;8, \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0432 <code>INK<\/code>\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430, \u0430 <code>PAPER<\/code>\u00a0\u2014 \u0447\u0451\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442. \u041a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432.<\/p>\n<p>\u041a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c, \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043b\u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u044c, \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0447\u0451\u0440\u043d\u044b\u043c? \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0441\u0432\u0435\u0442\u0430, \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043e\u0442 0.0 \u0434\u043e 1.0, \u043a\u0430\u043a \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0435\u043d \u0446\u0432\u0435\u0442\u043e\u043c (\u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0447\u0451\u0440\u043d\u044b\u043c). \u042d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u0415\u0441\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/en.wikipedia.org\/wiki\/Ordered_dithering\" rel=\"noopener noreferrer nofollow\">ordered dithering<\/a> (\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u0438\u0437\u0435\u0440\u0438\u043d\u0433). \u0415\u0433\u043e \u0438\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430 \u043f\u0438\u043a\u0441\u0435\u043b\u044c, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0443\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u0438\u043a\u0441\u0435\u043b\u044c. \u041f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0432 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0435\u0435\u0441\u044f \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0435 \u0433\u043b\u0430\u0437\u0443 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u044f\u0440\u043a\u043e\u0441\u0442\u0438. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0434\u0438\u0437\u0435\u0440\u0438\u043d\u0433\u0430 8&#215;8, \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0431\u043b\u043e\u043a\u0430\u043c \u0446\u0432\u0435\u0442\u0430 8&#215;8, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0431\u044b\u043b\u043e \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<p>\u0418\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0441\u0432\u0435\u0442\u0430. \u0414\u0430\u0436\u0435 \u043f\u0440\u0438 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u043c \u0434\u0438\u0437\u0435\u0440\u0438\u043d\u0433\u0435 \u043c\u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0442\u0442\u0435\u043d\u043a\u043e\u0432 \u0434\u043b\u044f \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u043e\u0441\u0432\u0435\u0449\u0430\u044e\u0449\u0438\u0445 \u043e\u0434\u0438\u043d \u043e\u0431\u044a\u0435\u043a\u0442. \u041f\u043e \u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0441\u0435\u044f\u043d\u043d\u043e\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435, \u0431\u0435\u0437 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>\u041d\u0430\u0448\u0430 \u0446\u0435\u043b\u044c \u2014 \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/714\/ec5\/f62\/714ec5f62322684785f516321680aa28.png\" width=\"600\" height=\"412\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/714\/ec5\/f62\/714ec5f62322684785f516321680aa28.png\"\/><\/figure>\n<p>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u043c ZX Spectrum?<\/p>\n<p>\u042f \u0432\u043d\u0451\u0441 \u0432 \u043a\u043e\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u044e\u043a \u0441 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043b\u0443\u0447\u0430\u043c\u0438 \u043d\u0430 \u0431\u043b\u043e\u043a 8&#215;8 \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u043b\u044c\u0437\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0441\u0432\u0435\u0442\u0430 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0439. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u044f\u0440\u043a\u043e\u0441\u0442\u0438 \u043d\u0430 \u0431\u043b\u043e\u043a, \u043d\u043e \u043c\u043d\u0435 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0442\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0441\u0442\u0440\u0430\u0434\u0430\u043b\u0430. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0443\u0433\u043b\u0430 \u0431\u043b\u043e\u043a\u0430 8&#215;8 \u0447\u0451\u0440\u043d\u044b\u0435, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u041a\u043e\u0434 \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442: \u0432 \u043f\u043e\u0434\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 <code>TraceRay<\/code>\u00a0\u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u0441\u0444\u0435\u0440\u044b (\u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0444\u0435\u0440 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 <code>S<\/code>). \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0446\u0438\u043a\u043b\u0430 \u0441\u0444\u0435\u0440 \u043b\u0443\u0447 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u043d\u0438\u0445, \u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043b\u0443\u0447\u043e\u043c \u0438 \u0441\u0444\u0435\u0440\u043e\u0439, \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u0432 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u0441\u0444\u0435\u0440\u044b \u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435:<\/p>\n<pre><code>1601 LET NX = DX*MT - S(CS, 1): LET NY = DY*MT - S(CS, 2): LET NZ = DZ*MT - S(CS, 3) 1610 LET PL = AI 1615 LET NL = (NX*LX + NY*LY + NZ*LZ) 1620 IF NL > 0 THEN LET PL = PL + DI * NL \/ SQR(NX*NX + NY*NY + NZ*NZ)<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 <code>CS<\/code>\u00a0\u2014 \u044d\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u0441\u0444\u0435\u0440\u044b (Closest Sphere);\u00a0<code>PL<\/code>\u00a0\u2014 \u043d\u043e\u0432\u0430\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0430\u044f \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u044f (Pixel Lighting); (<code>LX<\/code>,\u00a0<code>LY<\/code>,\u00a0<code>LZ<\/code>),\u00a0<code>DI<\/code>\u00a0\u0438 <code>AI<\/code>\u00a0\u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u043e\u043d\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0432\u0435\u0442\u0430, \u0435\u0433\u043e \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0438 \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f. \u0418\u0437 \u0441\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 <code>LX<\/code>,\u00a0<code>LY<\/code>,\u00a0<code>LZ<\/code>\u00a0\u0437\u0430\u0434\u0430\u044e\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u044f \u0441\u043c\u043e\u0433 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 <code>SQR<\/code>\u00a0\u0438 \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 1620.<\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0435 \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0435 \u0446\u0432\u0435\u0442 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0431\u043b\u043e\u043a\u0435 8&#215;8, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u044b\u0439 \u0447\u0430\u0441\u0442\u044b\u0439 \u0446\u0432\u0435\u0442 \u0438 \u0447\u0451\u0440\u043d\u044b\u0439.<\/p>\n<p>\u042f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043a\u043e\u0434 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0437\u0435\u0440\u0438\u043d\u0433\u0430 \u0411\u0430\u0439\u0435\u0440\u0430:<\/p>\n<pre><code>   3 GO SUB 7000     ...  6999 REM ===== Initialize 8x8 Bayer matrix ===== 7000 DIM H(64) 7001 RESTORE 7100 7002 FOR I = 1 TO 64 7003   READ H(I): LET H(I) = H(I) \/ 64 7004 NEXT I 7005 RETURN  7100 DATA  0, 32,  8, 40,  2, 34, 10, 42 7101 DATA 48, 16, 56, 24, 50, 18, 58, 26 7102 DATA 12, 44,  4, 36, 14, 46,  6, 38 7103 DATA 60, 28, 52, 20, 62, 30, 54, 22 7104 DATA  3, 35, 11, 43,  1, 33,  9, 41 7105 DATA 51, 19, 59, 27, 49, 17, 57, 25 7106 DATA 15, 47,  7, 39, 13, 45,  5, 37 7107 DATA 63, 31, 55, 23, 61, 29, 53, 21<\/code><\/pre>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u044f \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e \u0435\u0433\u043e \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0435 \u0411\u0430\u0439\u0435\u0440\u0430:<\/p>\n<pre><code>320 IF C(CI) > 0 AND H(CI) &lt;= L(CI) THEN PLOT U, V<\/code><\/pre>\n<p>\u042f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b \u044d\u0442\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e \u0438, \u0435\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u0434\u043e\u0431\u0440\u0443\u044e \u043c\u0438\u043d\u0443\u0442\u0443 \u043d\u0435 \u043c\u043e\u0433 \u043f\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0432\u043e\u0438\u043c \u0433\u043b\u0430\u0437\u0430\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/40c\/5f4\/6ed\/40c5f46ed83f9f6d06a3a61c56477ff9.png\" width=\"1300\" height=\"1073\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/40c\/5f4\/6ed\/40c5f46ed83f9f6d06a3a61c56477ff9.png\"\/><\/figure>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, <em>\u044d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e<\/em>!<\/p>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0438\u0437-\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0442\u0440\u044e\u043a\u0430 \u0441 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043b\u0443\u0447\u0430\u043c\u0438 \u043d\u0430 \u0431\u043b\u043e\u043a \u043f\u043b\u044e\u0441 \u0438\u0437-\u0437\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043e\u0441\u0432\u0435\u0449\u0451\u043d\u043d\u043e\u0441\u0442\u0438. \u041d\u043e \u0432\u0441\u0451 \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u043f\u043b\u043e\u0445\u043e.<\/p>\n<p>\u041a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0435\u0435. \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e? \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e. \u041f\u043e\u0445\u043e\u0436\u0435, \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u044b \u0436\u0451\u043b\u0442\u043e\u0433\u043e\/\u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u0434\u0435\u043b\u0430\u044f \u0431\u043b\u043e\u043a\u0438 \u043a\u0440\u0430\u0441\u043d\u044b\u043c\u0438 \u0438 \u0436\u0451\u043b\u0442\u044b\u043c\u0438, \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u044f\u0441\u044c \u043e\u0442 \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u0437\u0430\u0442\u0435\u043d\u0451\u043d\u043d\u043e\u0441\u0442\u0438 (\u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043d\u0438\u0445 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0447\u0451\u0440\u043d\u043e\u0433\u043e). \u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0441 \u0437\u0435\u043b\u0451\u043d\u044b\u043c\/\u0436\u0451\u043b\u0442\u044b\u043c \u0438 \u0441\u0438\u043d\u0438\u043c\/\u0436\u0451\u043b\u0442\u044b\u043c, \u043f\u043e\u0445\u043e\u0436\u0435, \u043c\u043e\u0436\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u0447\u0451\u0440\u043d\u044b\u0439\/\u0436\u0451\u043b\u0442\u044b\u0439, \u0441\u0438\u043d\u0438\u0439\/\u0436\u0451\u043b\u0442\u044b\u0439 \u0438 \u0441\u043d\u043e\u0432\u0430 \u0447\u0451\u0440\u043d\u044b\u0439\/\u0436\u0451\u043b\u0442\u044b\u0439. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044f \u0435\u0449\u0451 \u0432\u0435\u0440\u043d\u0443\u0441\u044c \u043a \u044d\u0442\u043e\u043c\u0443.<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <a href=\"https:\/\/gabrielgambetta.com\/zx-raytracer-4-src.html\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<h3>\u041f\u044f\u0442\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f: \u0442\u0435\u043d\u0438<\/h3>\n<p>\u041a \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u044f \u0443\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u0441\u0432\u043e\u0438\u043b\u0441\u044f \u0441\u043e \u0441\u0440\u0435\u0434\u043e\u0439 \u0438 \u043f\u0440\u0438\u0432\u044b\u043a \u043a\u043e\u0434\u0438\u0442\u044c, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043d\u0430 \u0434\u0432\u043e\u0440\u0435 1984 \u0433\u043e\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u0441\u043c\u043e\u0433\u0443 \u0437\u0430\u0439\u0442\u0438. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u0430\u043f \u2014 \u0442\u0435\u043d\u0438.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u0436\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e.\u00a0<a href=\"https:\/\/gabrielgambetta.com\/computer-graphics-from-scratch\/04-shadows-and-reflections.html#shadows\" rel=\"noopener noreferrer nofollow\">\u0422\u0435\u043e\u0440\u0438\u044f<\/a>\u00a0\u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430: \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u0447\u043a\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u0435\u0436\u0434\u0443 \u0442\u043e\u0447\u043a\u043e\u0439 \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f, \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0435\u0433\u043e (\u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0442\u0435\u043d\u044c). \u041c\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e <code>TraceRay<\/code>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0443\u044e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u043e\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0430 \u0438 \u0441\u0444\u0435\u0440\u044b \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0441\u0432\u0435\u0442\u0430, \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0443\u044e \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>2090 REM ----- Specialized TraceRay for shadow checks ----- 2091 REM Params: (IX, IY, IZ): ray start; (LX, LY, LZ): ray direction (directional light vector) 2092 REM Returns: H = 1 if the ray intersects any sphere, H = 0 otherwise 2093 REM Optimizations: (TMIN, TMAX) hardcoded to (epsilon, +inf)  2100 LET A = 2*(LX*LX + LY*LY + LZ*LZ)  2110 FOR S = 1 TO NS  2111    LET CX = IX - S(S,1): LET CY = IY - S(S,2): LET CZ = IZ - S(S,3) 2120    LET B = -2*(CX*LX + CY*LY + CZ*LZ) 2130    LET C = (CX*CX + CY*CY + CZ*CZ) - S(S, 4)  2140    LET D = B*B - 2*A*C 2150    IF D &lt; 0 THEN GO TO 2210 2160    LET D = SQR(D)  2170    LET T = (B + D) \/ A 2180    IF T > 0.01 THEN LET H = 1: RETURN 2190    LET T = (B - D) \/ A 2200    IF T > 0.01 THEN LET H = 1: RETURN  2210 NEXT S 2220 LET H = 0: RETURN<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043e\u0441\u0432\u0435\u0449\u0451\u043d\u043d\u043e\u0441\u0442\u0438:<\/p>\n<pre><code>1600 LET IX = DX*MT: LET IY = DY*MT: LET IZ = DZ*MT 1601 LET NX = IX - S(CS, 1): LET NY = IY - S(CS, 2): LET NZ = IZ - S(CS, 3) 1610 LET PL = AI  1612 GO SUB 2100: IF H = 1 THEN RETURN  1615 LET NL = (NX*LX + NY*LY + NZ*LZ) 1620 IF NL > 0 THEN LET PL = PL + DI * NL \/ SQR(NX*NX + NY*NY + NZ*NZ)<\/code><\/pre>\n<p>\u0418 \u0432\u043e\u0442, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c\u2026<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c78\/f6f\/1c2\/c78f6f1c2f48d9048ae999cc104479c6.png\" width=\"1300\" height=\"1073\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c78\/f6f\/1c2\/c78f6f1c2f48d9048ae999cc104479c6.png\"\/><\/figure>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u043c \u044d\u0442\u043e \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430 \u043b\u0443\u0447\u0435\u0439 CGFS:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e32\/2c0\/801\/e322c08017a0a74ace3636e0d1c6446b.png\" width=\"600\" height=\"412\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e32\/2c0\/801\/e322c08017a0a74ace3636e0d1c6446b.png\"\/><\/figure>\n<p>\u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 (\u043c\u044b \u0441\u043d\u043e\u0432\u0430 \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u043a 17 \u0447\u0430\u0441\u0430\u043c), \u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e \u0442\u043e\u0433\u043e \u0441\u0442\u043e\u0438\u0442!<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/gabrielgambetta.com\/zx-raytracer-5-src.html\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043d\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<h3>\u0427\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435?<\/h3>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u041d\u043e \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u043b\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u043c\u0438, \u0438\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0449\u0438\u043c\u0438, \u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u043e. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0441\u0442\u0430\u043d\u0435\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f: Spectrum \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0435\u0451, \u043d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0435\u043a. \u0412\u043f\u043e\u043b\u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c\u043e, \u043d\u043e, \u043f\u043e\u0445\u043e\u0436\u0435, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u043e\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u0443\u0441\u0438\u043b\u0438\u0439.<\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u043e\u0441\u044c \u0434\u043b\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u043d \u0441\u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u042f \u0441\u043c\u043e\u0433\u0443 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u0447\u0442\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0434\u043e\u0439\u0434\u0443\u0442 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (\u0438\u043b\u0438 \u043c\u0435\u043d\u0435\u0435 \u0442\u043e\u0447\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f <code>SQR<\/code>). \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u044f \u0432\u043e\u0437\u044c\u043c\u0443\u0441\u044c \u0437\u0430 \u044d\u0442\u043e!<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u0435\u043d\u044f \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0430\u043f\u0440\u044f\u0433\u0430\u0435\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043d\u0430 \u043a\u0440\u0430\u044f\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430 \u0438\u0434\u0435\u0439 \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u0438\u0437-\u0437\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 Spectrum \u0438\u0445 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430 100%.<\/p>\n<h3>\u041d\u043e\u0441\u0442\u0430\u043b\u044c\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f<\/h3>\n<p>\u042d\u0442\u043e \u0431\u044b\u043b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435. \u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439, \u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439!<\/p>\n<p>\u0411\u044b\u043b\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e \u0441\u043d\u043e\u0432\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 Sinclair BASIC \u0441\u043f\u0443\u0441\u0442\u044f \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u043b\u0435\u0442. \u0425\u043e\u0442\u044f \u044f\u0437\u044b\u043a \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u0435\u0436\u043d\u0438\u043c, \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u044f: \u043d\u0430\u0447\u0430\u043b \u0434\u0443\u043c\u0430\u0442\u044c \u0432 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0445 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f\u0445 \u0438 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0445 \u0432 BASIC. \u041d\u0435 \u0437\u043d\u0430\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u043b\u0438 \u044d\u0442\u043e, \u0447\u0442\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 \u0434\u0430\u043b\u0438 \u043c\u043d\u0435 \u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u043e\u043a\u0430\u0431\u0443\u043b\u044f\u0440 \u0434\u043b\u044f \u043c\u044b\u0448\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432 BASIC, \u0438\u043b\u0438 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u043d\u0435 \u0443\u0436\u0435 \u043d\u0435 \u0434\u0435\u0441\u044f\u0442\u044c \u043b\u0435\u0442. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u0442\u043e, \u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>\u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0432 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0440\u0430\u0437\u0443\u043c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f <code>GO TO<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a\u0430\u043a \u0432\u0441\u0435 \u0437\u043d\u0430\u044e\u0442, \u0421\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0412\u0440\u0435\u0434\u043d\u044b\u043c\u2122. \u0412 \u0442\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u044d\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0451, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e: \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>GO SUB<\/code>; \u043d\u0438\u043a\u0430\u043a\u0438\u0445 <code>WHILE<\/code>\u00a0\u0438\u043b\u0438 <code>REPEAT<\/code>; \u0443\u00a0<code>IF<\/code>\u00a0\u043d\u0435 \u0431\u044b\u043b\u043e <code>END IF<\/code>;\u00a0<code>FOR<\/code>\u00a0\u043d\u0435 \u0438\u043c\u0435\u043b <code>BREAK<\/code>\u00a0\u0438\u043b\u0438 <code>CONTINUE<\/code>\u00a0(\u044d\u0442\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438, \u043d\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c). \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <code>GO TO<\/code>. \u0414\u0430, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0441\u043f\u0430\u0433\u0435\u0442\u0442\u0438-\u043a\u043e\u0434\u0443, \u043d\u043e <em>\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e<\/em>; \u043c\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438, \u0445\u043e\u0442\u044f \u0438 \u043f\u0440\u043e\u0441\u0442, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u0447\u0438\u0441\u0442\u043e.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f \u0441\u043a\u0443\u0447\u0430\u044e \u043f\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0441\u0440\u0435\u0434\u044b. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u043e\u0432, \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 (\u0434\u0430\u0436\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e!). ZX Spectrum \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e <em>\u043e\u0441\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c<\/em>. \u0412\u0435\u0441\u044c \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434 Z80, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u041f\u0417\u0423 \u0438 \u0410\u041b\u0423 \u2014 \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0443\u043c\u0435\u0449\u0430\u043b\u043e\u0441\u044c \u0432 \u0433\u043e\u043b\u043e\u0432\u0435. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u0442\u044c \u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0442\u0430\u043a\u0442\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u2014 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u044d\u0448\u0435\u0439, \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043e\u0432 \u0438\u043b\u0438 \u0447\u0435\u0433\u043e-\u0442\u043e \u0435\u0449\u0451, \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u0436\u0438\u0437\u043d\u044c. \u042f \u0441\u043a\u0443\u0447\u0430\u044e \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u044d\u0442\u043e\u043c\u0443. \u041d\u044b\u043d\u0435\u0448\u043d\u0438\u0435 \u0434\u0435\u0442\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043e\u0449\u0443\u0442\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0432\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u0442\u0430\u043a\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u0438 \u044d\u0442\u043e \u043c\u0435\u043d\u044f \u043f\u0435\u0447\u0430\u043b\u0438\u0442.<\/p>\n<pre><code>9999 STOP<\/code><\/pre>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/788984\/\"> https:\/\/habr.com\/ru\/articles\/788984\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u042f \u043b\u044e\u0431\u043b\u044e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u043b\u0443\u0447\u0435\u0439 \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u0432\u044f\u0442\u0438\u043b \u0438\u043c <a href=\"https:\/\/gabrielgambetta.com\/computer-graphics-from-scratch\/02-basic-raytracing.html\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0441\u0432\u043e\u0435\u0439 \u043a\u043d\u0438\u0433\u0438<\/a>. \u041c\u0435\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u043c\u043e\u044f \u043b\u044e\u0431\u043e\u0432\u044c \u043a <a href=\"https:\/\/en.wikipedia.org\/wiki\/ZX_Spectrum\" rel=\"noopener noreferrer nofollow\">ZX Spectrum<\/a> \u2014 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u043c\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0443 1982 \u0433\u043e\u0434\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u0432\u044b\u0440\u043e\u0441 \u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0441\u044f \u043c\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e. \u041f\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c \u044d\u0442\u0430 \u043c\u0430\u0448\u0438\u043d\u0430 \u0441\u0442\u043e\u043b\u044c \u0441\u043c\u0435\u0445\u043e\u0442\u0432\u043e\u0440\u043d\u043e \u0441\u043b\u0430\u0431\u0430 (\u0438 \u0434\u0430\u0436\u0435 \u043f\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0430\u043c 1980-\u0445), \u0447\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u0432 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043b\u0443\u0447\u0435\u0439 \u0438\u0437 \u043a\u043d\u0438\u0433\u0438 Computer Graphics from Scratch \u043d\u0430 ZX Spectrum?<\/p>\n<p>\u0412 ZX Spectrum \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 Z80 \u043d\u0430 3,5 \u041c\u0413\u0446 (\u0432 \u0442\u044b\u0441\u044f\u0447\u0443 \u0440\u0430\u0437 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u043c\u043d\u043e\u0436\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u0430 (!!!), \u0438 48 \u041a\u0411 \u041e\u0417\u0423 (\u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435); \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c 256&#215;176 (\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0434\u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f), \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c 15 \u0446\u0432\u0435\u0442\u043e\u0432 (\u0432 \u043c\u0438\u043b\u043b\u0438\u043e\u043d \u0440\u0430\u0437 \u043c\u0435\u043d\u044c\u0448\u0435, \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438). [\u041f\u0440\u0438\u043c. \u043f\u0435\u0440.: \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440 \u0438\u043c\u0435\u043b \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 256&#215;192, \u043d\u043e \u0432 Basic \u0431\u044b\u043b\u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u0432\u0435 \u043d\u0438\u0436\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 \u043f\u043e 8 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u044f <a class=\"mention\" href=\"\/users\/ermouth\">@ermouth<\/a> \u0438 <a class=\"mention\" href=\"\/users\/mobi\">@mobi<\/a>.] \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e CPU!<\/p>\n<p>\u042f \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 Sinclair BASIC \u2014 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Spectrum. \u042d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e BASIC, \u0430 \u0434\u0440\u0435\u0432\u043d\u0438\u0439, \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u0438\u0430\u043b\u0435\u043a\u0442 BASIC. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043d\u0451\u043c \u2014 \u044d\u0442\u043e <code>FOR<\/code>\u00a0\u0438 <code>IF<\/code>\u00a0(\u0430 \u0443 <code>IF<\/code>\u00a0\u043d\u0435\u0442 <code>ELSE<\/code>\u00a0\u0438 \u0434\u0430\u0436\u0435 <code>ENDIF<\/code>); \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b; \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u043e\u043b\u044c\u043a\u043e <code>GO TO<\/code>\u00a0\u0438 <code>GO SUB<\/code>; \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0432\u0435\u0440\u0445\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439. \u041d\u043e, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043e\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435! \u0415\u0441\u043b\u0438 \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435.<\/p>\n<p>\u042f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u0441\u0440\u0435\u0434\u0443: \u043a\u043e\u0434 \u043d\u0430 BASIC \u044f \u043f\u0438\u0448\u0443 \u0432 VS Code, \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u044e \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/speccyorg\/bas2tap\" rel=\"noopener noreferrer nofollow\">BAS2TAP<\/a> \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 <a href=\"https:\/\/fuse-emulator.sourceforge.net\/\" rel=\"noopener noreferrer nofollow\">FUSE<\/a>. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0439.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044f \u043d\u0435 \u043f\u0438\u0441\u0430\u043b \u043d\u0430 BASIC \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u043b\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b \u0443\u0434\u0438\u0432\u043b\u0451\u043d, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u0441\u0451 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b. \u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u044d\u0442\u0438\u043c, \u043c\u043d\u0435 \u0431\u044b\u043b\u043e \u0441 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0434\u043e \u0434\u0435\u0441\u044f\u0442\u0438 \u043b\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u044d\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432 \u043c\u043e\u0437\u0433\u0443 \u043a\u0430\u043a \u0432\u0441\u0451, \u0447\u0442\u043e \u043c\u044b \u0438\u0437\u0443\u0447\u0430\u0435\u043c \u0432 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f\u0437\u044b\u043a\u0438 \u0438 \u0430\u043a\u0446\u0435\u043d\u0442\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043d\u0430 \u0434\u0432\u043e\u0440\u0435 1984 \u0433\u043e\u0434!<\/p>\n<h3>\u041f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f: \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043b\u0443\u0447\u0435\u0439<\/h3>\n<p>\u041c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u044f \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b <a href=\"https:\/\/gabrielgambetta.com\/computer-graphics-from-scratch\/02-basic-raytracing.html#rendering-our-first-spheres\" rel=\"noopener noreferrer nofollow\">\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043b\u0443\u0447\u0435\u0439 CGFS<\/a>\u00a0\u043d\u0430 BASIC, \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u044b\u0432\u043e\u0434\u0438\u043b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 32&#215;22 \u0431\u043b\u043e\u043a\u0430. \u041a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0432\u0441\u0451 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0427\u0438\u0441\u043b\u043e \u0432 \u043b\u0435\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 (879.76) \u2014 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0414\u0430, \u043f\u043e\u0447\u0442\u0438 15 \u043c\u0438\u043d\u0443\u0442. \u0410 \u0432\u043e\u0442 \u0442\u0430 \u0436\u0435 \u0441\u0446\u0435\u043d\u0430, \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0435\u043d\u043d\u0430\u044f \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c \u043b\u0443\u0447\u0435\u0439 CGFS \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u0439 \u0436\u0435 \u0441\u0446\u0435\u043d\u044b \u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432:<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043b\u044f Spectrum \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434:<\/p>\n<pre><code>   1 BRIGHT 1: CLS     5 LET ROX = 0    6 LET ROY = 0    7 LET ROZ = 0    8 LET TMIN = 0    9 LET TMAX = 10000    10 FOR X = 0 TO 31   20   FOR Y = 0 TO 21    30     LET RDX = (X - 16) \/ 32   31     LET RDY = (11 - Y) \/ 32   32     LET RDZ = 1    40     GO SUB 1000    50     PAPER COL   51     PRINT AT Y, X; \" \"   100   NEXT Y  105   GO SUB 3000: PRINT AT 0, 0; TIME  110 NEXT X   120 STOP   1000 REM ===== TraceRay ===== 1001 REM Params: (ROX, ROY, ROZ): ray origin; (RDX, RDY, RDZ): ray direction; (TMIN, TMAX): wanted ranges of t 1002 REM Returns: COL: pixel color  1010 LET COL = -1: LET MINT = 0  1100 RESTORE 9000 1101 READ NS 1102 FOR S = 1 TO NS  1110    READ SCX, SCY, SCZ, SRAD, SCOL  1200    LET COX = ROX - SCX 1201    LET COY = ROY - SCY 1202    LET COZ = ROZ - SCZ  1210    LET EQA = RDX*RDX + RDY*RDY + RDZ*RDZ 1211    LET EQB = 2*(RDX*COX + RDY*COY + RDZ*COZ) 1212    LET EQC = (COX*COX + COY*COY + COZ*COZ) - SRAD*SRAD  1220    LET DISC = EQB*EQB - 4*EQA*EQC 1230    IF DISC &lt; 0 THEN GO TO 1500  1240    LET T1 = (-EQB + SQR(DISC)) \/ 2*EQA 1241    LET T2 = (-EQB - SQR(DISC)) \/ 2*EQA  1250    IF T1 >= TMIN AND T1 &lt;= TMAX AND (T1 &lt; MINT OR COL = -1) THEN LET COL = SCOL: LET MINT = T1 1300    IF T2 >= TMIN AND T2 &lt;= TMAX AND (T2 &lt; MINT OR COL = -1) THEN LET COL = SCOL: LET MINT = T2  1500 NEXT S  1999 IF COL = -1 THEN LET COL = 0 2000 RETURN  3000 REM ===== Get timestamp in seconds ===== 3001 LET TIME = (65536*PEEK 23674 + 256*PEEK 23673 + PEEK 23672) \/ 50 3002 RETURN  8998 REM ===== Sphere data ===== 8999 REM Sphere count, followed by (SCX, SCY, SCZ, SRAD, COLOR) 9000 DATA 4 9001 DATA  0, -1, 4, 1, 2 9002 DATA  2,  0, 4, 1, 1 9003 DATA -2,  0, 4, 1, 4 9004 DATA 0, -5001, 0, 5000, 6<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438 \u043b\u0443\u0447\u0435\u0439 \u0438 \u0441 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c CGFS \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0430\u043c \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0430, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 \u0434\u0440\u0435\u0432\u043d\u0435\u043c \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0435 BASIC. \u041d\u043e \u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e \u043a\u043e\u0434\u0443, \u0447\u0442\u043e\u0431\u044b \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 Spectrum.<\/p>\n<p>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a. \u041a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0438\u043c\u0435\u0442\u044c \u043d\u043e\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>GO TO<\/code>\u00a0\u0438\u043b\u0438 <code>GO SUB<\/code>. \u0412 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0434\u0432\u043e\u0435\u0442\u043e\u0447\u0438\u0435\u043c, \u0447\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>IF ... THEN<\/code>, \u0432\u0435\u0434\u044c \u0432 <code>END IF<\/code> \u0432 \u044d\u0442\u043e\u043c \u0434\u0438\u0430\u043b\u0435\u043a\u0442\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442!<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0432\u0440\u0430\u0437\u0431\u0440\u043e\u0441. \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 Spectrum BASIC \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0442\u044f \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a \u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043c\u0435\u043d\u044f\u0442\u044c, \u044d\u0442\u043e \u0431\u044b\u043b \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438, \u043a\u0440\u0430\u0442\u043d\u044b\u043c\u0438 10, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u00ab\u043c\u0435\u0441\u0442\u043e\u00bb \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>\u041c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u044d\u0442\u043e\u0433\u043e:<\/p>\n<pre><code>1 BRIGHT 1: CLS<\/code><\/pre>\n<p>\u0412 Spectrum \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0436\u0438\u043c. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043d\u0451\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435, \u0430 \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0436\u0435\u043c, \u0447\u0442\u043e <code>BRIGHT 1<\/code>\u00a0\u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u044f\u0440\u043a\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u0430\u043b\u0438\u0442\u0440\u044b, \u0430 <code>CLS<\/code>\u00a0\u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u044d\u043a\u0440\u0430\u043d. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0438\u0434\u0451\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430:<\/p>\n<pre><code>  5 LET ROX = 0   6 LET ROY = 0   7 LET ROZ = 0   8 LET TMIN = 0   9 LET TMAX = 10000   10 FOR X = 0 TO 31  20   FOR Y = 0 TO 21   30     LET RDX = (X - 16) \/ 32  31     LET RDY = (11 - Y) \/ 32  32     LET RDZ = 1   40     GO SUB 1000   50     PAPER COL  51     PRINT AT Y, X; \" \"  100   NEXT Y 105   GO SUB 3000: PRINT AT 0, 0; TIME 110 NEXT X  120 STOP<\/code><\/pre>\n<p>\u0412 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0441 5 \u043f\u043e 9 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430. \u0412 BASIC \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u043d\u043e \u0441 \u043d\u0438\u043c\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0442\u043e\u0438\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0442\u043e\u0447\u0435\u043a \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430 <code>RO<\/code>\u00a0\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0442\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 <code>ROX<\/code>,\u00a0<code>ROY<\/code>\u00a0\u0438 <code>ROZ<\/code>.<\/p>\n<p>\u0412 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0441 10 \u043f\u043e 110 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b, \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043e\u0431\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0445\u043e\u043b\u0441\u0442 (32&#215;22 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430). \u041f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430, \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u0432, \u0441\u0442\u0440\u043e\u043a\u0430 105 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:\u00a0<code>GO SUB 3000<\/code>\u00a0\u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442 \u043f\u043e\u0442\u043e\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a \u043f\u043e\u0434\u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 (<em>subroutine<\/em>)\u00a0\u0432 \u0441\u0442\u0440\u043e\u043a\u0435 3000:<\/p>\n<pre><code>3000 REM ===== Get timestamp in seconds ===== 3001 LET TIME = (65536*PEEK 23674 + 256*PEEK 23673 + PEEK 23672) \/ 50 3002 RETURN<\/code><\/pre>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 3000 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 <code>REM<\/code> (\u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 remark, \u00ab\u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435\u00bb). \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u00ab\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438\u00bb, \u043d\u043e ZX Spectrum \u2014 \u0431\u0440\u0438\u0442\u0430\u043d\u0441\u043a\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u0443\u043c\u0430 \u0431\u0435\u0437\u0443\u043c\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u0438\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Clive_Sinclair\" rel=\"noopener noreferrer nofollow\">\u0441\u044d\u0440\u0430 \u041a\u043b\u0430\u0439\u0432\u0430 \u0421\u0438\u043d\u043a\u043b\u0435\u0440\u0430<\/a>. \u0422\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439.<\/p>\n<p>\u041c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u0430\u043a\u043b\u0438\u043d\u0430\u043d\u0438\u0435 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 3001 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u041a\u0430\u043a?\u00a0<code>PEEK<\/code>\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435. \u042d\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043b\u0438\u0448\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0435\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 24-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a <code>FRAME<\/code>; \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0433\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0435 20 \u043c\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0434\u0435\u043b\u0438\u043c \u0435\u0433\u043e \u043d\u0430 50, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>TIME<\/code>.<\/p>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>RETURN<\/code>\u00a0\u0432 \u0441\u0442\u0440\u043e\u043a\u0435 3002 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0432\u0448\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u0438 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u00ab\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>TIME<\/code>. \u042d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c <code>GO SUB<\/code>\u00a0\/\u00a0<code>RETURN<\/code>\u00a0\u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 <code>CALL<\/code>\u00a0\/\u00a0<code>RET<\/code>\u00a0\u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435.<\/p>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 120 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0446\u0438\u043a\u043b. \u0421\u0442\u0440\u043e\u043a\u0438 \u0441 30 \u043f\u043e 32 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0445\u043e\u043b\u0441\u0442\u0430 \u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u043e\u0447\u043a\u0438 \u043e\u0431\u0437\u043e\u0440\u0430 (<code>CanvasToViewport<\/code>\u00a0\u0432 CGFS). \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0430 \u0437\u0430\u0434\u0430\u043d\u043e <code>(RDX, RDY, RDZ)<\/code>.<\/p>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 40 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u00ab\u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00bb; \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u044d\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 <code>TraceRay<\/code>. \u041a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0442, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>COL<\/code>\u00a0\u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0446\u0432\u0435\u0442 \u0442\u043e\u0433\u043e, \u0441 \u0447\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u043b\u0443\u0447.<\/p>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 50 \u0438 51 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442 \u0431\u043b\u043e\u043a. \u042d\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u0435\u043c \u0446\u0432\u0435\u0442\u0430 <code>PAPER<\/code>\u00a0(\u0444\u043e\u043d\u0430) \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0436\u0435).<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c <code>TraceRay<\/code>, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 1000. \u041e\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0431\u043b\u043e\u043a\u0430 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code>1000 REM ===== TraceRay ===== 1001 REM Params: (ROX, ROY, ROZ): ray origin; (RDX, RDY, RDZ): ray direction; (TMIN, TMAX): wanted ranges of t 1002 REM Returns: COL: pixel color<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0432\u0441\u0451 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e, \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u0438 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0451\u043d\u043d\u043e\u0441\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u2014 \u044d\u0442\u043e <code>(ROX, ROY, ROZ)<\/code>,\u00a0<code>(RDX, RDY, RDZ)<\/code>,\u00a0<code>TMIN<\/code>\u00a0\u0438 <code>TMAX<\/code>, \u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>COL<\/code>. \u041e\u043d\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043f\u0430\u043b\u0438\u0442\u0440\u0435 ZX Spectrum.<\/p>\n<p>\u0412 \u0441\u0442\u0440\u043e\u043a\u0435 1010 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u0438 \u0446\u0432\u0435\u0442\u0430 \u0441\u0444\u0435\u0440\u044b \u0432 \u043c\u0435\u0441\u0442\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f:<\/p>\n<pre><code>1010 LET COL = -1: LET MINT = 0<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u00ab\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0444\u0435\u0440\u044b\u00bb:<\/p>\n<pre><code>1100 RESTORE 9000 1101 READ NS 1102 FOR S = 1 TO NS 1110    READ SCX, SCY, SCZ, SRAD, SCOL<\/code><\/pre>\n<p>\u0421\u0442\u0440\u043e\u043a\u0430 1100 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u00ab\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 9000, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0446\u0435\u043d\u044b:<\/p>\n<pre><code>8998 REM ===== Sphere data ===== 8999 REM Sphere count, followed by (SCX, SCY, SCZ, SRAD, COLOR) 9000 DATA 4 9001 DATA  0, -1, 4, 1, 2 9002 DATA  2,  0, 4, 1, 1 9003 DATA -2,  0, 4, 1, 4 9004 DATA  0, -5001, 0, 5000, 6<\/code><\/pre>\n<p>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>READ<\/code>\u00a0\u0432 \u0441\u0442\u0440\u043e\u043a\u0435 1101 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0447\u0438\u0441\u043b\u043e 4 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 9000) \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e NS. \u0417\u0430\u0442\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0430 1102 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0446\u0438\u043a\u043b \u00ab\u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0444\u0435\u0440\u044b\u00bb, \u0438 \u043f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 1110 \u2014 \u044d\u0442\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 5 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0445 \u0441\u0444\u0435\u0440\u0443. \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 <code>READ<\/code>\u00a0\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 9002, \u0433\u043e\u0442\u043e\u0432\u043e\u043c \u043a \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0421\u0442\u0440\u043e\u043a\u0438 \u0441 1200 \u043f\u043e 1300 \u0440\u0435\u0448\u0430\u044e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 <a href=\"https:\/\/gabrielgambetta.com\/computer-graphics-from-scratch\/02-basic-raytracing.html#ray-meets-sphere\" rel=\"noopener noreferrer nofollow\">\u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043b\u0443\u0447\u0430 \u0441\u043e \u0441\u0444\u0435\u0440\u043e\u0439<\/a>, \u0430 \u0441\u0442\u0440\u043e\u043a\u0438 1250 \u0438 1300 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e\u0442 \u0441\u0430\u043c\u043e\u0435 \u0431\u043b\u0438\u0436\u043d\u0435\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code>1200    LET COX = ROX - SCX 1201   <\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-366359","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/366359","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=366359"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/366359\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=366359"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=366359"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=366359"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}