{"id":409,"date":"2012-07-25T09:20:47","date_gmt":"2012-07-25T05:20:47","guid":{"rendered":"http:\/\/ratbag.vkomi.ru\/?p=409"},"modified":"2014-03-25T18:04:09","modified_gmt":"2014-03-25T14:04:09","slug":"java-applet-programm-for-koch-curvs-drawing","status":"publish","type":"post","link":"http:\/\/ratbag.vkomi.ru\/2012\/programming\/java-applet-programm-for-koch-curvs-drawing\/","title":{"rendered":"Java \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0438\u0432\u044b\u0445 \u041a\u043e\u0445\u0430"},"content":{"rendered":"

\u041b\u0435\u0442\u043e\u043c 2010-\u0433\u043e \u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0433\u043b\u0443\u0431\u0438\u043b\u0441\u044f \u0432 \u0442\u0435\u043c\u0443 \u0444\u0440\u0430\u043a\u0442\u0430\u043b\u043e\u0432 \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u0432 \u0441\u0440\u0435\u0434\u0435 Java. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0440\u0438\u0432\u043e\u0439 \u041a\u043e\u0445\u0430<\/a> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0442\u0440\u0435\u0437\u043a\u0430 \u0432 2D \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u041d\u0430 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0430\u0443\u0447\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u044f \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u044e, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u043b \u044d\u0442\u043e \u0434\u043b\u044f \u044d\u0441\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u044f.<\/p>\n

\u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0438\u0432\u043e\u0439 \u041a\u043e\u0445\u0430:<\/p>\n

    \n
  1. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441 \u0446\u0438\u043a\u043b\u043e\u043c \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430<\/strong> (\u0444\u0443\u043d\u043a\u0446\u0438\u044f draw<\/em>CurveKoch, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 java \u043d\u0438\u0436\u0435<\/a><\/em><\/em>). \u042d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u0435\u043b \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u0441\u0440\u0430\u0437\u0443, \u0435\u0449\u0435 \u0434\u043e \u0432\u043d\u0438\u043a\u0430\u043d\u0438\u044f \u0432 \u0431\u043e\u043b\u0435\u0435 \u0433\u0440\u0430\u043c\u043e\u0442\u043d\u044b\u0435 \u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b. \u0412 \u044d\u0442\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043f\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435, \u0432\u0441\u0435 4 \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u043b\u0438\u043d\u0438\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432. \u0412 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438, \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043e\u0442\u0440\u0435\u0437\u043a\u0430\u043c\u0438 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0426\u0438\u043a\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043f\u043e \u0441\u0443\u0442\u0438, \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f \u041a\u043e\u0445\u0430, \u0430 \u0435\u0451 «\u0447\u0435\u0440\u043d\u043e\u0432\u043e\u0439» \u0430\u043d\u0430\u043b\u043e\u0433, \u0441 «\u043d\u0435 \u0437\u0430\u0442\u0435\u0440\u0442\u043e\u0439» \u043b\u0438\u043d\u0438\u0435\u0439 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0440\u0435\u0437\u043a\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439:
    \n\"\u041a\u0440\u0438\u0432\u0430\u044f<\/li>\n
  2. <\/em> \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c<\/strong> (\u0444\u0443\u043d\u043a\u0446\u0438\u044f drawCurveKochRecur, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 java \u043d\u0438\u0436\u0435<\/a><\/em>) — \u0440\u0438\u0441\u0443\u0435\u0442 \u0443\u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u0432\u0443\u044e, \u0431\u0435\u0437 \u0447\u0435\u0440\u043d\u043e\u0432\u044b\u0445 \u043b\u0438\u043d\u0438\u0439. \u042d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0435 \u0436\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u044b, \u043d\u043e \u0435\u0433\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e, \u0437\u0430 \u0441\u0447\u0435\u0442 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043b\u0438\u0448\u044c \u0442\u0435 \u043b\u0438\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0440\u0438\u0432\u0443\u044e. \u0412\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044d\u0442\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430:
    \n\"\u041a\u0440\u0438\u0432\u0430\u044f<\/li>\n<\/ol>\n

    \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0438 \u0442\u043e\u0442 \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0432\u044b\u0434\u0430\u0447\u0443 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 — \u0441 \u043b\u0438\u043d\u0438\u044f\u043c\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0439 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0438\u043b\u0438 \u0431\u0435\u0437 \u043d\u0438\u0445.<\/p>\n

    \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0440\u0438\u0432\u044b\u0445 \u041a\u043e\u0445\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0444\u0438\u0433\u0443\u0440\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445, \u043a\u0430\u043a\u0438\u0435 \u0432\u0430\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u044f. \u0412\u043e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0438\u0441\u0443\u043d\u043a\u043e\u0432, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0432 \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0438\u0436\u0435 (examples):<\/p>\n

    <\/p>\n

    \"\u041a\u0440\u0438\u0432\u0430\u044f

    \u041a\u0440\u0438\u0432\u0430\u044f \u041a\u043e\u0445\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 — \u043e\u0442 0 \u0434\u043e 5.<\/p><\/div>\n

    \"\u0421\u043d\u0435\u0436\u0438\u043d\u043a\u0430

    \u0421\u043d\u0435\u0436\u0438\u043d\u043a\u0430 \u041a\u043e\u0445\u0430<\/a> \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 5<\/p><\/div>\n

    \"\u0421\u043d\u0435\u0436\u0438\u043d\u043a\u0430

    \u0421\u043d\u0435\u0436\u0438\u043d\u043a\u0430 \u041a\u043e\u0445\u0430 \u0438\u0437 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b-\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u0445: 3, 4, 5 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439<\/p><\/div>\n

    \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0444\u0430\u043d\u0442\u0430\u0437\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0444\u0438\u0433\u0443\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u0443\u044e:<\/p>\n

    \"\u0414\u0432\u0435

    \u0414\u0432\u0435 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043a\u0440\u0438\u0432\u044b\u0435 \u041a\u043e\u0445\u0430 \u0441\u043c\u043e\u0442\u0440\u044f\u0442\u0441\u044f \u043e\u0441\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e<\/p><\/div>\n

    \u0415\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0432, \u044f \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b \u0441\u043d\u0435\u0436\u0438\u043d\u043a\u0443 \u041a\u043e\u0445\u0430<\/a> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430, \u0433\u0434\u0435 \u043a\u0440\u0438\u0432\u044b\u0435 \u0432\u043e\u0433\u043d\u0443\u0442\u044b \u0432\u043d\u0443\u0442\u0440\u044c. \u041a\u0430\u043a \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u0436\u0435, \u044d\u0442\u0430 \u0444\u0438\u0433\u0443\u0440\u0430 \u043d\u043e\u0441\u0438\u0442 \u043e\u0441\u043e\u0431\u043e\u0435 \u0438\u043c\u044f — \u0444\u0440\u0430\u043a\u0442\u0430\u043b \u0421esaro (\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 Wolfram|Alfa)<\/a>:<\/p>\n

    \"\u0424\u0440\u0430\u043a\u0442\u0430\u043b

    \u0424\u0440\u0430\u043a\u0442\u0430\u043b Cesaro (\u0427\u0435\u0437\u0430\u0440\u043e) \u0438\u043b\u0438 \u0441\u043d\u0435\u0436\u0438\u043d\u043a\u0430 \u041a\u043e\u0445\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430, \u043a\u0440\u0438\u0432\u044b\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u044c<\/p><\/div>\n

    <\/a><\/p>\n

    \u041b\u0438\u0441\u0442\u0438\u043d\u0433 (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434) Java \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/h3>\n

    \u041a\u043e\u0434 \u0441\u0430\u043c\u043e \u0437\u0430\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u0441\u0451 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e. \u0414\u043b\u044f \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0442\u0435\u0445 \u0438\u043b\u0438 \u0438\u043d\u044b\u0445 \u0444\u0438\u0433\u0443\u0440, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435.<\/p>\n

    \u041b\u0438\u0441\u0442\u0438\u043d\u0433 java sample applet CurveKoch<\/em>:<\/p>\n

    \/*\r\n * License GNU GPL v2 http:\/\/www.gnu.org\/licenses\/gpl-2.0.html\r\n * Copyright (c) 2012, vankof@gmail.com\r\n *\/\r\nimport java.awt.Color;\r\nimport java.awt.Dimension;\r\nimport java.awt.Graphics;\r\nimport java.awt.Graphics2D;\r\nimport java.awt.RenderingHints;\r\nimport java.awt.event.WindowAdapter;\r\nimport java.awt.event.WindowEvent;\r\nimport java.awt.geom.Line2D;\r\nimport java.awt.geom.Point2D;\r\nimport javax.swing.JApplet;\r\nimport javax.swing.JFrame;\r\n\r\npublic class CurveKoch extends JApplet {\r\n\r\n    private boolean drawn = false;\r\n    private Graphics2D g2 = null;\r\n\r\n    @Override\r\n    public void paint(Graphics g) {\r\n\r\n        if (drawn)\r\n            return;\r\n        drawn = true;\r\n\r\n        super.paint(g);        \r\n\r\n        g2 = (Graphics2D) g;\r\n\r\n        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);\r\n        g2.setPaint(Color.gray);\r\n\r\n        \/* \u0420\u0430\u0441\u0447\u0435\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0441\u043d\u0435\u0436\u0438\u043d\u043a\u0438 \u041a\u043e\u0445\u0430 *\/\r\n        double a = 300; \/\/ \u0414\u043b\u0438\u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 (px)\r\n        double p1x = 250; \/\/ \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 x \u043d\u0438\u0436\u043d\u0435\u0439 \u043b\u0435\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 (px)\r\n        double p1y = 400; \/\/ \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 y \u043d\u0438\u0436\u043d\u0435\u0439 \u043b\u0435\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 (px)\r\n        double p2x = p1x + a;\r\n        double p2y = p1y;\r\n        double h = Math.sqrt(Math.pow(a, 2) - Math.pow((a \/ 2), 2) \/ 4);\r\n        double pmx = (p1x + p2x) \/ 2;\r\n        double pmy = (p1y + p2y) \/ 2;\r\n        double p3x = pmx + (h * (p1y - pmy)) \/ (a \/ 2);\r\n        double p3y = pmy + (h * (p1x - pmx)) \/ (a \/ 2);\r\n\r\n        \/* \u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u0441\u0442 \u0431\u044b\u0441\u0442\u0440\u043e\u0442\u044b \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 (drawCurveKochRecur)\r\n         * \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441 \u0446\u0438\u043a\u043b\u043e\u043c \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c (drawCurveKoch).\r\n         * \u0420\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e 4 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u043a\u0440\u0438\u0432\u044b\u0435 \u041a\u043e\u0445\u0430 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438.\r\n         * \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435.\r\n         * \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u044d\u0442\u043e \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\r\n         * \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0430 Java. \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\r\n         * \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.\r\n         *\/\r\n        drawCurveKoch     (new Line2D.Double(600,150,200,150), 8);\r\n        drawCurveKochRecur(new Line2D.Double(600,300,200,300), 8);\r\n        drawCurveKoch     (new Line2D.Double(600,450,200,450), 4);\r\n        drawCurveKochRecur(new Line2D.Double(600,600,200,600), 4);\r\n\r\n        \/* \u041a\u0440\u0438\u0432\u044b\u0435 \u041a\u043e\u0445\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 *\/\r\n        int y = 40; \/\/ \u0421\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u043f\u043e \u043e\u0441\u0438 Y\r\n        int iter = 0;\r\n        while(y \u2039 800){ \/\/ \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f\r\n            drawCurveKochRecur(new Line2D.Double(600,y,200,y), iter);\r\n            y+=140; \/\/ \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u0440\u0438\u0432\u044b\u043c\u0438\r\n            iter++;\r\n        }\r\n\r\n        \/* \u041e\u0431\u044b\u0447\u043d\u0430\u044f \u0441\u043d\u0435\u0436\u0438\u043d\u043a\u0430 \u041a\u043e\u0445\u0430 (Koch snowflake) *\/\r\n        drawCurveKochRecur(new Line2D.Double(p1x,p1y,p2x,p2y), 5); \/\/ \u041e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435\r\n        drawCurveKochRecur(new Line2D.Double(p3x,p3y,p1x,p1y), 5); \/\/ \u041b\u0435\u0432\u0430\u044f\r\n        drawCurveKochRecur(new Line2D.Double(p2x,p2y,p3x,p3y), 5); \/\/ \u041f\u0440\u0430\u0432\u0430\u044f\r\n\r\n        \/* \u0421\u043d\u0435\u0436\u0438\u043d\u043a\u0430 \u041a\u043e\u0445\u0430 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043d\u0430\u0445 *\/\r\n        drawCurveKoch(new Line2D.Double(p1x, p1y, p2x, p2y), 3); \/\/ \u041e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435\r\n        drawCurveKoch(new Line2D.Double(p3x, p3y, p1x, p1y), 4); \/\/ \u041b\u0435\u0432\u0430\u044f\r\n        drawCurveKoch(new Line2D.Double(p2x, p2y, p3x, p3y), 5); \/\/ \u041f\u0440\u0430\u0432\u0430\u044f\r\n\r\n        \/* \u0414\u0432\u0435 \u043a\u0440\u0438\u0432\u044b\u0445 \u041a\u043e\u0445\u0430, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e *\/\r\n        drawCurveKochRecur(new Line2D.Double(500,300,100,300), 5);\r\n        drawCurveKochRecur(new Line2D.Double(100,300,500,300), 5);\r\n\r\n        \/* Cesaro fractal - \u043a\u0440\u0438\u0432\u044b\u0435 \u041a\u043e\u0445\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0430, \u0432\u043e\u0433\u043d\u0443\u0442\u044b\u0435 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u044c. *\/\r\n        drawCurveKochRecur(new Line2D.Double(200, 200, 600, 200), 5);\r\n        drawCurveKochRecur(new Line2D.Double(600, 200, 600, 600), 5);\r\n        drawCurveKochRecur(new Line2D.Double(600, 600, 200, 600), 5);\r\n        drawCurveKochRecur(new Line2D.Double(200, 600, 200, 200), 5);\r\n\r\n        \/* \u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0444\u0440\u0430\u043a\u0442\u0430\u043b \u041a\u043e\u0445\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u043e\u043c\u0431\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0440\u0430\u043a\u0442\u0430\u043b\u0430 Cesaro *\/\r\n        drawCurveKochRecur(new Line2D.Double(460,400,400,340), 4);\r\n        drawCurveKochRecur(new Line2D.Double(400,460,460,400), 4);\r\n        drawCurveKochRecur(new Line2D.Double(340,400,400,460), 4);\r\n        drawCurveKochRecur(new Line2D.Double(400,340,340,400), 4);    \r\n\r\n    }\r\n\r\n    \/** \u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0438\u0432\u0443\u044e \u041a\u043e\u0445\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0438\u043d\u0438\u0438 line.\r\n     * \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 - maxIter.\r\n     * \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441 \u0446\u0438\u043a\u043b\u043e\u043c \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430.\r\n     *\/\r\n    private void drawCurveKoch(Line2D line, int maxIter) {\r\n\r\n        int j = 0;\r\n        int ln = 0;\r\n        Line2D[] linesNext = null;\r\n        int linesNextLength = 0;\r\n        int linesNextCnt = 0;\r\n        int i = 0;\r\n        Line2D[] linesDraw = null;\r\n        Point2D ps = null;\r\n        Point2D pe = null;\r\n        double a = 0;\r\n        double h = 0;\r\n\r\n        drawLine(line);\r\n\r\n        a = line.getP1().distance(line.getP2());\r\n\r\n        linesNext = new Line2D[1];\r\n        linesNext[0] = line;\r\n\r\n        for (i = 0; i \u2039 maxIter; i++) {\r\n\r\n            linesDraw = linesNext;\r\n\r\n            a = a \/ 3;\r\n            \/\/g2.drawString(String.valueOf(a), 10, Integer.parseInt(String.valueOf(Math.round(10+(i*10)))));\r\n            h = Math.sqrt(Math.pow(a, 2) - Math.pow((a \/ 2), 2) \/ 4);\r\n\r\n            if (linesNextLength == 0) {\r\n                linesNextLength = 4;\r\n            } else {\r\n                linesNextLength = linesNextLength * 4; \/\/ \u0421 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043b-\u0432\u043e \u043b\u0438\u043d\u0438\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 2 \u0440\u0430\u0437\u0430\r\n            }\r\n            linesNextCnt = 0;\r\n            linesNext = new Line2D[linesNextLength];\r\n            j = 0;\r\n            ln = linesDraw.length;\r\n            for (j = 0; j \u2039 ln; j++) {\r\n\r\n                ps = linesDraw[j].getP1();\r\n                pe = linesDraw[j].getP2();\r\n\r\n                Point2D pm = new Point2D.Double((ps.getX() + pe.getX()) \/ 2, (ps.getY() + pe.getY()) \/ 2);\r\n                Point2D p1 = new Point2D.Double((2 * ps.getX() + pe.getX()) \/ 3, (2 * ps.getY() + pe.getY()) \/ 3);\r\n                Point2D p2 = new Point2D.Double((2 * pe.getX() + ps.getX()) \/ 3, (2 * pe.getY() + ps.getY()) \/ 3);\r\n                Point2D p3 = new Point2D.Double(\r\n                        pm.getX() + (h * (-p2.getY() + pm.getY())) \/ (a \/ 2),\r\n                        pm.getY() + (h * (p2.getX() - pm.getX())) \/ (a \/ 2));\r\n\r\n                \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043b\u0438\u043d\u0438\u0439 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438\r\n                linesNext[linesNextCnt] = new Line2D.Double(ps, p1);\r\n                \/\/drawLine(linesNext[linesNextCnt]);\r\n                linesNextCnt++;\r\n                linesNext[linesNextCnt] = new Line2D.Double(p1, p3);\r\n                drawLine(linesNext[linesNextCnt]);\r\n                linesNextCnt++;\r\n                linesNext[linesNextCnt] = new Line2D.Double(p3, p2);\r\n                drawLine(linesNext[linesNextCnt]);\r\n                linesNextCnt++;\r\n                linesNext[linesNextCnt] = new Line2D.Double(p2, pe);\r\n                \/\/drawLine(linesNext[linesNextCnt]);\r\n                linesNextCnt++;\r\n            }\r\n        }\r\n    }\r\n\r\n    \/** \u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0438\u0432\u0443\u044e \u041a\u043e\u0445\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043b\u0438\u043d\u0438\u0438 line.\r\n     * \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0442\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 - maxIter. \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438 - curIter.\r\n     * \r\n     * \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.\r\n     * \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u0440\u0435\u0448\u0435\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \"\u0441\u0442\u0438\u0440\u0430\u043d\u0438\u044f\" \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u043e\u0442\u0440\u0435\u0437\u043a\u0430 \u043b\u0438\u043d\u0438\u0438.\r\n     * \u0422.\u0435., \u0432 \u0438\u0442\u043e\u0433\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u0432\u0430\u044f,\r\n     * \u0431\u0435\u0437 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439.\r\n     * \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0439, \u0447\u0435\u043c \u0441 \u0446\u0438\u043a\u043b\u043e\u043c \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c,\r\n     *\/\r\n    private void drawCurveKochRecur(Line2D line, int maxIter, int curIter) {\r\n\r\n        if (curIter == maxIter) \/\/ \u0443\u0431\u0440\u0430\u0432 \u044d\u0442\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u044b \u0432\u0441\u0435 \u043b\u0438\u043d\u0438\u0438, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0430 \u043a\u0440\u0438\u0432\u0430\u044f\r\n            drawLine(line);        \r\n\r\n        if (curIter \u2039= maxIter){\r\n\r\n            double a = line.getP1().distance(line.getP2());\r\n            a = a \/ 3;\r\n            \/\/g2.drawString(String.valueOf(a), 10, Integer.parseInt(String.valueOf(Math.round(10+(i*10)))));\r\n            double h = Math.sqrt(Math.pow(a, 2) - Math.pow((a \/ 2), 2) \/ 4);\r\n\r\n            Point2D ps = line.getP1();\r\n            Point2D pe = line.getP2();\r\n\r\n            Point2D pm = new Point2D.Double((ps.getX() + pe.getX()) \/ 2, (ps.getY() + pe.getY()) \/ 2);\r\n            Point2D p1 = new Point2D.Double((2 * ps.getX() + pe.getX()) \/ 3, (2 * ps.getY() + pe.getY()) \/ 3);\r\n            Point2D p2 = new Point2D.Double((2 * pe.getX() + ps.getX()) \/ 3, (2 * pe.getY() + ps.getY()) \/ 3);\r\n            Point2D p3 = new Point2D.Double(\r\n                    pm.getX() + (h * (-p2.getY() + pm.getY())) \/ (a \/ 2),\r\n                    pm.getY() + (h * (p2.getX() - pm.getX())) \/ (a \/ 2)\r\n                );\r\n\r\n            \/\/ \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u044f\r\n            curIter++;\r\n            drawCurveKochRecur(new Line2D.Double(ps,p1), maxIter, curIter);\r\n            drawCurveKochRecur(new Line2D.Double(p1,p3), maxIter, curIter);\r\n            drawCurveKochRecur(new Line2D.Double(p3,p2), maxIter, curIter);\r\n            drawCurveKochRecur(new Line2D.Double(p2,pe), maxIter, curIter);\r\n\r\n        }\r\n    }\r\n\r\n    private void drawCurveKochRecur(Line2D line, int maxIter) {\r\n        drawCurveKochRecur(line, maxIter, 0);\r\n    }\r\n\r\n    \/** \u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u044e *\/\r\n    public void drawLine(Line2D line) {\r\n        g2.draw(new Line2D.Double(line.getP1(), line.getP2()));\r\n    }    \r\n\r\n    \/** Run main *\/\r\n    public static void main(String s[]) {\r\n        JFrame f = new JFrame(\"ShapesDemo2D\");\r\n        f.addWindowListener(new WindowAdapter() {\r\n\r\n            public void windowClosing(WindowEvent e) {\r\n                System.exit(0);\r\n            }\r\n        });\r\n        JApplet applet = new CurveKoch();\r\n        f.getContentPane().add(\"Center\", applet);\r\n        applet.init();\r\n        f.pack();\r\n        f.setSize(new Dimension(800, 800));\r\n        f.show();\r\n    }\r\n}<\/pre>\n