{"id":503005,"date":"2026-11-13T05:52:21","date_gmt":"2026-11-13T02:52:21","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=503005"},"modified":"2026-11-13T05:52:21","modified_gmt":"2026-11-13T02:52:21","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=503005","title":{"rendered":"\u0420\u0438\u0441\u0443\u0435\u043c \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438 \u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e, \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 OpenSCAD"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/06\/10\/15\/06101543b54023e65b719b4af42bc56f.jpg\" width=\"1049\" height=\"672\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/06\/10\/15\/06101543b54023e65b719b4af42bc56f.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/06\/10\/15\/06101543b54023e65b719b4af42bc56f.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u043c\u0438\u0442\u0440\u0438\u0439. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0433\u043b\u0430\u0437\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 OpenSCAD \u0438 \u044f \u0445\u043e\u0447\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u0437\u043e\u0440 \u0438 \u0435\u0449\u0451 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0438\u0441\u0443\u0435\u043c.<\/p>\n<p>\u0418\u0442\u0430\u043a OpenSCAD \u044d\u0442\u043e \u043a\u0430\u043a \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c CAD \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u043c\u044b\u0448\u043a\u043e\u0439, \u0430 \u043f\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043d\u0435\u0439 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>\u0418 \u0432\u044b \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435, \u0430 \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0449\u0435-\u043b\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0441\u0442\u0430\u0440\u0438\u043d\u043a\u0435 \u043c\u044b\u0448\u043a\u043e\u0439. \u041d\u043e \u044f \u043f\u043e\u0445\u043e\u0436\u0435 \u0440\u0430\u0437\u0433\u0430\u0434\u0430\u043b \u0437\u0430\u043c\u044b\u0441\u0435\u043b \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0444\u043e\u0440\u043c\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c\u0438. \u0418 \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0434\u0435\u0442\u0430\u043b\u0435\u0439 OpenSCAD \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0443\u0447\u0448\u0435.<\/p>\n<h2>\u0428\u0435\u0441\u0442\u0435\u0440\u043d\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u0438\u0435\u043c.<\/h2>\n<p>\u0418 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0434\u0435\u0442\u0430\u043b\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u044f. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ To activate animation, select \"View-&gt;Animate\" from the\/\/ menu; this will cause three fields to appear\/\/ underneath the Preview console: Time, FPS &amp; Steps.\/\/ To commence animation, enter values into the FPS and Steps input\/\/Example FPS = 60 Steps = 120\/\/ For set initial position uncomment\/\/$t=0;\/\/Fist gear...............................................Teath = 20;M = 1;PressAng = 20;C = 0.25;DPeatch = Teath * M;RPeatch = DPeatch\/2;DMain = DPeatch * cos(PressAng);St = PI * M\/2; \/\/ Teeth thickness by diameterStx = DPeatch * sin(St*(180\/PI)\/DPeatch); \/\/ Teeth thickness by chordDIn = DPeatch - (2 + C)* M;DOut = DPeatch + 2 * M;ROut = DOut \/ 2;d = sqrt(RPeatch^2 - (Stx\/2)^2);Steps = 90;function ToRad(T) = T * (PI\/180);function Evolv_X(T, MD) = MD\/2 * (cos(T) + ToRad(T) * sin(T));function Evolv_Y(T, MD) = MD\/2 * (sin(T) - ToRad(T) * cos(T));FistEvolv_temp = [ for (a = [0 : Steps]) if (sqrt((Evolv_X(a, DMain) + RPeatch - Evolv_X(20, DMain))^2 + (Evolv_Y(a, DMain) - Evolv_Y(20, DMain) - Stx\/2)^2) &lt; ROut)  \/\/ Cut pionts outside gear[Evolv_X(a, DMain) + RPeatch - Evolv_X(20, DMain), Evolv_Y(a, DMain) - Evolv_Y(20, DMain) - Stx\/2]];FistEvolv = concat([[d - (2 + 2)* M\/2 , - Stx\/2]], FistEvolv_temp);SecondEvolv = [ for(variable = FistEvolv)  [variable.x, -variable.y]];FistEvolvB = [ for(a =[0 : (len(FistEvolv) - 1)])  a];SecondEvolvB = [ for(a =[0 : (len(SecondEvolv) - 1)])2 * len(SecondEvolv) - a - 1];rotate ([0, 0, $t*360])linear_extrude(height = 2 * M, center = true, convexity = 10, twist = 0) union() {for (i = [0 : (Teath - 1)])rotate([0,0,(360\/Teath) * i]) polygon(concat(FistEvolv, SecondEvolv),[concat(FistEvolvB, SecondEvolvB)]); circle(d = DIn);}\/\/Second Gear.........................................................Teath_2 = 30;DPeatch_2 = Teath_2 * M;RPeatch_2 = DPeatch_2 \/ 2;DMain_2 = DPeatch_2 * cos(PressAng);Stx2 = DPeatch_2 * sin(St*(180\/PI)\/DPeatch_2); \/\/ Teeth thickness by chordDIn2 = DPeatch_2 - (2 + C)* M;DOut2 = DPeatch_2 + 2 * M;d2 = sqrt(RPeatch_2^2 - (Stx2\/2)^2);FistEvolv_temp2 = [ for (a = [0 : Steps]) if (sqrt((Evolv_X(a, DMain_2)+ RPeatch_2 - Evolv_X(20, DMain_2))^2 + (Evolv_Y(a, DMain_2) - Evolv_Y(20, DMain_2) - Stx2\/2)^2) &lt; DOut2 \/ 2)  \/\/ Cut pionts outside gear[Evolv_X(a, DMain_2)+ RPeatch_2 - Evolv_X(20, DMain_2), Evolv_Y(a, DMain_2) - Evolv_Y(20, DMain_2) - Stx2\/2]];FistEvolv2 = concat([[d2 - (2 + 2)* M\/2 , - Stx2\/2]],FistEvolv_temp2);SecondEvolv2 = [ for(variable = FistEvolv2)[variable.x, -variable.y]];FistEvolvB2 = [ for(a =[0 : (len(FistEvolv2) - 1)]) a];SecondEvolvB2 = [ for(a =[0 : (len(SecondEvolv2) - 1)])2 * len(SecondEvolv2) - a - 1];k = Teath \/ Teath_2;offset = (360\/(2*Teath_2));color( \"Lime\", 1.0 )translate([DPeatch\/2 + DPeatch_2\/2, 0, 0])rotate([0,0,k * (-$t*360) + offset])linear_extrude(height = 2 * M, center = true, convexity = 10, twist = 0) union() {for (i = [0 : (Teath_2 -1)])rotate([0,0,(360\/Teath_2) * i]) polygon(concat(FistEvolv2, SecondEvolv2),[concat(FistEvolvB2, SecondEvolvB2)]); circle(d = DIn2);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u0434 \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c &#171;View-&gt;Animate&#187; \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e. \u041f\u0440\u0430\u0432\u0434\u0430 \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0432 \u043f\u043e\u043b\u044f FPS \u0438 Steps \u0432\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041b\u044e\u0431\u0443\u044e \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u044e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0435\u043c\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u044d\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0443\u0431\u044c\u0435\u0432 \u0438 \u0443\u0433\u043e\u043b \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0432\u044b\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u0438 \u0442\u0440\u0438.<\/p>\n<p>\u0421\u0430\u043c\u0430\u044f \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438 \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e-\u0436\u0435 \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u043a\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0442\u0440\u0435\u0437\u043a\u0430 \u043f\u043e \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0443 \u0431\u0435\u0437 \u0441\u043a\u043e\u043b\u044c\u0436\u0435\u043d\u0438\u044f. \u0412\u043e\u0442 \u0435\u0451 \u0444\u043e\u0440\u043c\u0443\u043b\u0430:<\/p>\n<pre><code class=\"cpp\">Steps = 90;function ToRad(T) = T * (PI\/180);function Evolv_X(T, MD) = MD\/2 * (cos(T) + ToRad(T) * sin(T));function Evolv_Y(T, MD) = MD\/2 * (sin(T) - ToRad(T) * cos(T));FistEvolv_temp = [ for (a = [0 : Steps]) if (sqrt((Evolv_X(a, DMain) + RPeatch - Evolv_X(20, DMain))^2 + (Evolv_Y(a, DMain) - Evolv_Y(20, DMain) - Stx\/2)^2) &lt; ROut)  \/\/ Cut pionts outside gear[Evolv_X(a, DMain) + RPeatch - Evolv_X(20, DMain), Evolv_Y(a, DMain) - Evolv_Y(20, DMain) - Stx\/2]];FistEvolv = concat([[d - (2 + 2)* M\/2 , - Stx\/2]], FistEvolv_temp);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041c\u044b \u043f\u0440\u043e\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448 \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u043e\u0442\u0440\u0435\u0437\u043e\u043a \u043e\u0442 \u043d\u0443\u043b\u044f \u0434\u043e 90. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u0441\u044f \u043e\u0442 \u043b\u0438\u0448\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u044b. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u0442 \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438, \u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0437\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438.<\/p>\n<p>\u042d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u0430 \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438 \u0438 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c. \u041d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e 2 \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u044b, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438. \u041d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u0443 \u0432\u043d\u0438\u0437 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0442\u043e\u043b\u0449\u0438\u043d\u044b \u0437\u0443\u0431\u0430 \u043f\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u043c\u0443 \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u0443. \u0410 \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0442\u043e\u043b\u0449\u0438\u043d\u0443 \u0437\u0443\u0431\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443. \u0418 \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0430\u043c\u0435\u0442\u0440 \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u044b \u0432 \u043d\u043e\u043b\u044c \u044f \u043d\u0430\u0445\u043e\u0436\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u044b \u043f\u0440\u0438 20 \u0433\u0440\u0430\u0434\u0443\u0441\u0430\u0445 \u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u044e \u0438\u0445. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u0443 \u0432\u043d\u0438\u0437 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0442\u043e\u043b\u0448\u0438\u043d\u044b \u0437\u0443\u0431\u0430 Stx.<\/p>\n<p>\u041d\u0443 \u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u0443 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0437\u043d\u0430\u043a \u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b y.<\/p>\n<pre><code class=\"cpp\">SecondEvolv = [ for(variable = FistEvolv)  [variable.x, -variable.y]];<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h2>\u0428\u0435\u0441\u0442\u0435\u0440\u043d\u044f \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u0438\u0435\u043c.<\/h2>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/6f\/1c\/2a\/6f1c2a0c97b294b66cfc2a9f9aedf6e4.jpg\" width=\"809\" height=\"645\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/6f\/1c\/2a\/6f1c2a0c97b294b66cfc2a9f9aedf6e4.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/6f\/1c\/2a\/6f1c2a0c97b294b66cfc2a9f9aedf6e4.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0443 \u0430 \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u044e \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u0438\u0435. \u0422\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u044e \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430. \u041d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437 \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438. \u0412\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ To activate animation, select \"View-&gt;Animate\" from the\/\/ menu; this will cause three fields to appear\/\/ underneath the Preview console: Time, FPS &amp; Steps.\/\/ To commence animation, enter values into the FPS and Steps input\/\/Example FPS = 60 Steps = 120\/\/ For set initial position uncomment\/\/$t=0;\/\/Fist gear...............................................Teath = 30;M = 1;PressAng = 20;C = 0.25;DPeatch = Teath * M;RPeatch = DPeatch\/2;DMain = DPeatch * cos(PressAng);St = PI * M\/2; \/\/ Teeth thickness by diameterStx = DPeatch * sin(St*(180\/PI)\/DPeatch); \/\/ Teeth thickness by chordDIn = DPeatch - 1 * M;DOut = DPeatch + (2 + C) * M;ROut = DOut \/ 2;d = sqrt((DPeatch\/2)^2 - (Stx\/2)^2);steps = 90;function ToRad(T) = T * (PI\/180);function Evolv_X(T, MD) = MD\/2 * (cos(T) + ToRad(T) * sin(T));function Evolv_Y(T, MD) = MD\/2 * (sin(T) - ToRad(T) * cos(T));FistEvolv_temp = [ for (a = [0 : steps]) if (sqrt((Evolv_X(a, DMain) + RPeatch  - Evolv_X(20, DMain))^2 + (Evolv_Y(a, DMain) - Evolv_Y(20, DMain) - Stx\/2)^2) &lt;  ROut)  \/\/ Cut pionts outside gear[Evolv_X(a, DMain)+ RPeatch - Evolv_X(20, DMain),Evolv_Y(a, DMain) - Evolv_Y(20, DMain) - Stx\/2]];FistEvolv = concat([[d - (2 + 2)* M\/2 , - Stx\/2]],FistEvolv_temp);SecondEvolv = [ for(variable = FistEvolv)[variable.x, -variable.y]];FistEvolvB = [ for(a =[0 : (len(FistEvolv) - 1)])  a];SecondEvolvB = [ for(a =[0 : (len(SecondEvolv) - 1)])len(SecondEvolv) - a - 1 + len(SecondEvolv)];rotate ([0, 0, $t*360])linear_extrude(height = 2 * M, center = true, convexity = 10, twist = 0)difference() {circle(d = DPeatch + 5 * M);for (i = [0 : (Teath -1)])rotate([0,0,(360\/Teath) * i]) polygon(concat(FistEvolv, SecondEvolv),[concat(FistEvolvB, SecondEvolvB)]); circle(d = DIn);}\/\/Second Gear.........................................................Teath_2 = 10;DPeatch_2 = Teath_2 * M;RPeatch_2 = DPeatch_2 \/ 2;DMain2 = DPeatch_2 * cos(PressAng);Stx_2 = DPeatch_2 * sin(St*(180\/PI)\/DPeatch_2); \/\/ Teeth thickness by chordDIn_2 = DPeatch_2 - (2 + C)* M;DOut_2 = DPeatch_2 + 2 * M;  ROut_2 = DOut_2 \/ 2;d2 = sqrt((DPeatch_2\/2)^2 - (Stx_2\/2)^2);FistEvolv_temp_2 = [ for (a = [0 : steps]) if (sqrt((Evolv_X(a, DMain2)+ (DPeatch_2\/ 2) - Evolv_X(20, DMain2))^2 + (Evolv_Y(a, DMain2) - Evolv_Y(20, DMain2) - Stx_2\/2)^2) &lt; DOut_2 \/ 2)  \/\/ Cut pionts outside gear[Evolv_X(a, DMain2)+ (DPeatch_2\/ 2) - Evolv_X(20, DMain2), Evolv_Y(a, DMain2) - Evolv_Y(20, DMain2) - Stx_2\/2]];FistEvolv_2 = concat([[d2 - (2 + 2)* M\/2 , - Stx_2\/2]],FistEvolv_temp_2);SecondEvolv_2 = [ for(variable = FistEvolv_2)[variable.x, -variable.y]];FistEvolvB_2 = [ for(a =[0 : (len(FistEvolv_2) - 1)]) a];SecondEvolvB_2 = [ for(a =[0 : (len(SecondEvolv_2) - 1)])2 * len(SecondEvolv_2) - a - 1];k = Teath \/ Teath_2;offset = 0;color( \"Lime\", 1.0 )translate([DPeatch\/2 - DPeatch_2\/2, 0, 0])rotate([0,0,k * ($t*360) + offset])linear_extrude(height = 2 * M, center = true, convexity = 10, twist = 0) union() {for (i = [0 : (Teath_2 -1)])rotate([0,0,(360\/Teath_2) * i]) polygon(concat(FistEvolv_2, SecondEvolv_2),[concat(FistEvolvB_2, SecondEvolvB_2)]); circle(d = DIn_2);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h2>\u0426\u0438\u043a\u043b\u043e\u0438\u0434\u043d\u044b\u0439 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440<\/h2>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/1c\/38\/70\/1c3870d1c790b8910f872ea9bf9c7ee4.jpg\" width=\"776\" height=\"663\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/1c\/38\/70\/1c3870d1c790b8910f872ea9bf9c7ee4.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/1c\/38\/70\/1c3870d1c790b8910f872ea9bf9c7ee4.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041c\u043d\u0435 \u0442\u0430\u043a \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u0447\u0442\u043e \u044f \u043d\u0430\u0447\u0430\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u0436\u0435 \u043a\u0430\u043a \u0438 \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c. \u0418 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b\u043e\u0438\u0434\u043d\u044b\u0439 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440. \u0412\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ To activate animation, select \"View-&gt;Animate\" from the\/\/ menu; this will cause three fields to appear\/\/ underneath the Preview console: Time, FPS &amp; Steps.\/\/ To commence animation, enter values into the FPS and Steps input\/\/Example FPS = 60 Steps = 120\/\/ For set initial position uncomment\/\/$t=0;D = 100;R = D\/2;Dout = 5;Drol = 5;Rrol = Drol\/2;E = 0.75;I = 39;N = I + 1;DHols = 65;H = 5;Steps = 360;function Cycloyd_X(T) = (R * cos(T)) - (Rrol * cos(T + atan(sin((1 - N) * T) \/ ((R \/ (E * N)) - cos((1 - N) * T))))) - (E * cos(N * T));function Cycloyd_Y(T) = (-R * sin(T)) + (Rrol * sin(T + atan(sin((1 - N) * T) \/ ((R \/ (E * N)) - cos((1 - N) * T))))) + (E * sin(N * T));\/\/Cycloyd body.........................................Cycloyd = [ for (a = [0 : Steps]) [Cycloyd_X(a), Cycloyd_Y(a)]];translate([E, 0, 0])rotate([0,0,($t*360)])linear_extrude(height = H, center = true, convexity = 10, twist = 0)difference() {    polygon(Cycloyd);     circle(d = 20);    translate([DHols\/2, 0, 0])        circle(d = Dout + 2 * E);        rotate([0,0,120])        translate([DHols\/2, 0, 0])            circle(d = Dout + 2 * E);    rotate([0,0,240])        translate([DHols\/2, 0, 0])            circle(d = Dout + 2 * E);}\/\/Rollers body.............................................................k = I\/N;rotate([0,0, k * ($t*360)])color( \"Lime\", 1.0 )linear_extrude(height = H, center = true, convexity = 10, twist = 0)union() {    difference()     {        circle(d = D  + 20);        circle(d = D);    }    for (i = [0 : I])        rotate([0,0,i * 360\/N])            translate([D\/2, 0, 0])                circle(d = Drol);};\/\/Vodilo........................................color( \"Aqua\", 1.0 )rotate([0,0,($t*360)])union() {    hull()     {        translate([0,0,-20]) cylinder(h = 5, d= 15);        translate([DHols\/2,0,-20])cylinder(h = 5, d= 15);    }    rotate([0,0,120])    hull()     {        translate([0,0,-20]) cylinder(h = 5, d= 15);        translate([DHols\/2,0,-20])cylinder(h = 5, d= 15);    }    rotate([0,0,240])    hull()     {        translate([0,0,-20]) cylinder(h = 5, d= 15);        translate([DHols\/2,0,-20])cylinder(h = 5, d= 15);    }    translate([DHols\/2, 0, -20])        cylinder(h = 20 + H,d = Dout);        rotate([0,0,120])        translate([DHols\/2, 0, -20])                    cylinder(h = 20 + H,d = Dout );    rotate([0,0,240])        translate([DHols\/2, 0, -20])            cylinder(h = 20 + H ,d = Dout);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0446\u0438\u043a\u043b\u043e\u0438\u0434\u0443. \u0412 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 CAD \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u044d\u0442\u043e \u0431\u044b\u043b\u043e-\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e, \u0430 \u0432 OpenSCAD \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<h2>\u0426\u0438\u043a\u043b\u043e\u0439\u0434\u043d\u044b\u0439 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440 \u0441 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0442\u0435\u043b\u0430\u043c\u0438 \u043a\u0430\u0447\u0435\u043d\u0438\u044f.<\/h2>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/extt\/91\/af\/17\/91af1745828485ea274ed513fc4d637f.jpg\" width=\"741\" height=\"636\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/extt\/91\/af\/17\/91af1745828485ea274ed513fc4d637f.jpg 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/extt\/91\/af\/17\/91af1745828485ea274ed513fc4d637f.jpg 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u041d\u0443 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e-\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440 \u0441 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0446\u0438\u043a\u043b\u043e\u0438\u0434\u043e\u0439. \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441. \u0410 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442-\u043b\u0438 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440\u044b \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0446\u0438\u043a\u043b\u043e\u0438\u0434\u043e\u0439. \u0418 \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u044f \u043d\u0430\u0448\u0435\u043b \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0446\u0438\u043a\u043b\u043e\u0438\u0434\u043d\u044b\u0439 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440 \u0441 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u043c\u0438 \u0442\u0435\u043b\u0430\u043c\u0438 \u043a\u0430\u0447\u0435\u043d\u0438\u044f. \u0412\u043e\u0442 <a href=\"https:\/\/www.youtube.com\/watch?v=c73QGWpfhQw\" rel=\"noopener nofollow\">\u0432\u0438\u0434\u0435\u043e<\/a>, \u0442\u0430\u043c \u0430\u0432\u0442\u043e\u0440 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440\u0430 \u043d\u0430\u0434 \u043f\u0440\u043e\u0441\u0442\u043e \u0446\u0438\u043a\u043b\u043e\u0438\u0434\u043d\u044b\u043c. \u041d\u0443 \u0430 \u043c\u044b \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044e:<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/ To activate animation, select \"View-&gt;Animate\" from the\/\/ menu; this will cause three fields to appear\/\/ underneath the Preview console: Time, FPS &amp; Steps.\/\/ To commence animation, enter values into the FPS and Steps input\/\/Example FPS = 60 Steps = 120\/\/ For set initial position uncomment\/\/$t=0;Dball = 6;Rball = Dball\/2;I = 17;Rout = 38;E = 0.2 * Dball;ZG = I + 1; \/\/gear ratioRin = Rout - 2 * E; HC = 2.2 * E; \/\/Separator thicknessDex = (Rin + E - Dball) * 2;Dsep = Dex + Dball; \/\/Separator diameterDcyclbody = 2 * Rout + 20;Dsepm = Dex + Dball;k = (I + 1)\/I;H = 5;function S(T) = sqrt((Rball + Dex\/2) ^ 2 - (E  * cos(ZG * T)) ^ 2);function L(T) = E * cos(ZG * T) + S(T);function XI(T) = atan2(E * ZG *  sin(ZG *T),S(T));function Cycloyd_X(T) = L(T) * sin(T) + Rball * sin(T + XI(T));function Cycloyd_Y(T) = L(T) * cos(T) + Rball * cos(T + XI(T));\/\/Cycloyd body.........................................Steps = 360;Cycloyd = [ for (a = [0 : Steps]) [Cycloyd_X(a), Cycloyd_Y(a)]];rotate([0,0,($t*360)])linear_extrude(height = H, center = true, convexity = 10, twist = 0)difference() {    circle(d = Dcyclbody);    polygon(Cycloyd);}\/\/Excenric...................................................color( \"Blue\", 1.0 )translate([0, E, 0])rotate([0,0, k * ($t*360)])    cylinder( h = H, d = Dex);\/\/Balls...................................................color( \"Aqua\", 1.0 )translate([0, E, 0])rotate([0,0, k * ($t*360)])for (i = [0 : I - 1])    rotate([0,0,i * 360\/I])        translate([0, Dsepm\/2, 0])            sphere(d = Dball);\/\/Seporator.........................................................color( \"Lime\", 1.0 )translate([0, E, 0])rotate([0,0, k * ($t*360)])linear_extrude(height = H, center = true, convexity = 10, twist = 0)difference() {    circle(d = Dsep + HC);    circle(d = Dsep - HC);    for (i = [0 : I - 1])        rotate([0,0,i * 360\/I])            translate([0, Dsepm\/2 , 0])                square(Dball,true);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<\/div>\n<\/details>\n<h2>\u0412\u044b\u0432\u043e\u0434<\/h2>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0441\u0442\u044c \u0437\u0430 \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043f\u043e\u0440\u0443\u0433\u0430\u0442\u044c. \u0423 \u043d\u0435\u0451 \u0443\u0436\u0430\u0441\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. \u0418\u0437-\u0437\u0430 \u043e\u043a\u043d\u0430 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b \u044d\u043a\u0440\u0430\u043d\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043d\u0435\u043c \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u042f \u0432\u0441\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043f\u0438\u0441\u0430\u043b \u0432 VSCodium. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438. \u042d\u0442\u043e \u043f\u0440\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438. \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0443\u0431\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c-\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u043d\u043e \u0432\u0441\u0435 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u0441\u0435\u0442\u043a\u0430 \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438.<\/p>\n<p>\u041d\u043e \u0435\u0441\u043b\u0438 \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u044d\u0442\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438, \u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0433\u043e\u043d\u044c. \u0415\u0441\u043b\u0438 \u0432\u0430\u0441 \u0443\u0442\u043e\u043c\u0438\u043b\u0438 \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 CAD \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430 \u043a\u0430\u043a \u0434\u0432\u0435 \u043a\u0430\u043f\u043b\u0438, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c. \u042d\u0442\u043e \u043a\u0430\u043a \u0433\u043b\u043e\u0442\u043e\u043a \u0441\u0432\u0435\u0436\u0435\u0433\u043e \u0432\u043e\u0437\u0434\u0443\u0445\u0430.<\/p>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1107322\/\">https:\/\/habr.com\/ru\/articles\/1107322\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435 \u043c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0414\u043c\u0438\u0442\u0440\u0438\u0439. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0433\u043b\u0430\u0437\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 OpenSCAD \u0438 \u044f \u0445\u043e\u0447\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u0437\u043e\u0440 \u0438 \u0435\u0449\u0451 \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0438\u0441\u0443\u0435\u043c.\u0418\u0442\u0430\u043a OpenSCAD \u044d\u0442\u043e \u043a\u0430\u043a \u0432\u044b \u043d\u0430\u0432\u0435\u0440\u043d\u043e \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c CAD \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u043c\u044b\u0448\u043a\u043e\u0439, \u0430 \u043f\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043d\u0435\u0439 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.\u0418 \u0432\u044b \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u0435, \u0430 \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0449\u0435-\u043b\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0441\u0442\u0430\u0440\u0438\u043d\u043a\u0435 \u043c\u044b\u0448\u043a\u043e\u0439. \u041d\u043e \u044f \u043f\u043e\u0445\u043e\u0436\u0435 \u0440\u0430\u0437\u0433\u0430\u0434\u0430\u043b \u0437\u0430\u043c\u044b\u0441\u0435\u043b \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u0434\u0435\u0442\u0430\u043b\u0435\u0439 \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0444\u043e\u0440\u043c\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c\u0438. \u0418 \u043a\u0430\u043a \u0440\u0430\u0437 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0434\u0435\u0442\u0430\u043b\u0435\u0439 OpenSCAD \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0443\u0447\u0448\u0435.\u0428\u0435\u0441\u0442\u0435\u0440\u043d\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u0438\u0435\u043c.\u0418 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0434\u0435\u0442\u0430\u043b\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u044f. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b:\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\/\/ To activate animation, select &#171;View-&gt;Animate&#187; from the\/\/ menu; this will cause three fields to appear\/\/ underneath the Preview console: Time, FPS &amp; Steps.\/\/ To commence animation, enter values into the FPS and Steps input\/\/Example FPS = 60 Steps = 120\/\/ For set initial position uncomment\/\/$t=0;\/\/Fist gear&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..Teath = 20;M = 1;PressAng = 20;C = 0.25;DPeatch = Teath * M;RPeatch = DPeatch\/2;DMain = DPeatch * cos(PressAng);St = PI * M\/2; \/\/ Teeth thickness by diameterStx = DPeatch * sin(St*(180\/PI)\/DPeatch); \/\/ Teeth thickness by chordDIn = DPeatch &#8212; (2 + C)* M;DOut = DPeatch + 2 * M;ROut = DOut \/ 2;d = sqrt(RPeatch^2 &#8212; (Stx\/2)^2);Steps = 90;function ToRad(T) = T * (PI\/180);function Evolv_X(T, MD) = MD\/2 * (cos(T) + ToRad(T) * sin(T));function Evolv_Y(T, MD) = MD\/2 * (sin(T) &#8212; ToRad(T) * cos(T));FistEvolv_temp = [ for (a = [0 : Steps]) if (sqrt((Evolv_X(a, DMain) + RPeatch &#8212; Evolv_X(20, DMain))^2 + (Evolv_Y(a, DMain) &#8212; Evolv_Y(20, DMain) &#8212; Stx\/2)^2) &lt; ROut)  \/\/ Cut pionts outside gear[Evolv_X(a, DMain) + RPeatch &#8212; Evolv_X(20, DMain), Evolv_Y(a, DMain) &#8212; Evolv_Y(20, DMain) &#8212; Stx\/2]];FistEvolv = concat([[d &#8212; (2 + 2)* M\/2 , &#8212; Stx\/2]], FistEvolv_temp);SecondEvolv = [ for(variable = FistEvolv)  [variable.x, -variable.y]];FistEvolvB = [ for(a =[0 : (len(FistEvolv) &#8212; 1)])  a];SecondEvolvB = [ for(a =[0 : (len(SecondEvolv) &#8212; 1)])2 * len(SecondEvolv) &#8212; a &#8212; 1];rotate ([0, 0, $t*360])linear_extrude(height = 2 * M, center = true, convexity = 10, twist = 0) union() {for (i = [0 : (Teath &#8212; 1)])rotate([0,0,(360\/Teath) * i]) polygon(concat(FistEvolv, SecondEvolv),[concat(FistEvolvB, SecondEvolvB)]); circle(d = DIn);}\/\/Second Gear&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;Teath_2 = 30;DPeatch_2 = Teath_2 * M;RPeatch_2 = DPeatch_2 \/ 2;DMain_2 = DPeatch_2 * cos(PressAng);Stx2 = DPeatch_2 * sin(St*(180\/PI)\/DPeatch_2); \/\/ Teeth thickness by chordDIn2 = DPeatch_2 &#8212; (2 + C)* M;DOut2 = DPeatch_2 + 2 * M;d2 = sqrt(RPeatch_2^2 &#8212; (Stx2\/2)^2);FistEvolv_temp2 = [ for (a = [0 : Steps]) if (sqrt((Evolv_X(a, DMain_2)+ RPeatch_2 &#8212; Evolv_X(20, DMain_2))^2 + (Evolv_Y(a, DMain_2) &#8212; Evolv_Y(20, DMain_2) &#8212; Stx2\/2)^2) &lt; DOut2 \/ 2)  \/\/ Cut pionts outside gear[Evolv_X(a, DMain_2)+ RPeatch_2 &#8212; Evolv_X(20, DMain_2), Evolv_Y(a, DMain_2) &#8212; Evolv_Y(20, DMain_2) &#8212; Stx2\/2]];FistEvolv2 = concat([[d2 &#8212; (2 + 2)* M\/2 , &#8212; Stx2\/2]],FistEvolv_temp2);SecondEvolv2 = [ for(variable = FistEvolv2)[variable.x, -variable.y]];FistEvolvB2 = [ for(a =[0 : (len(FistEvolv2) &#8212; 1)]) a];SecondEvolvB2 = [ for(a =[0 : (len(SecondEvolv2) &#8212; 1)])2 * len(SecondEvolv2) &#8212; a &#8212; 1];k = Teath \/ Teath_2;offset = (360\/(2*Teath_2));color( &#171;Lime&#187;, 1.0 )translate([DPeatch\/2 + DPeatch_2\/2, 0, 0])rotate([0,0,k * (-$t*360) + offset])linear_extrude(height = 2 * M, center = true, convexity = 10, twist = 0) union() {for (i = [0 : (Teath_2 -1)])rotate([0,0,(360\/Teath_2) * i]) polygon(concat(FistEvolv2, SecondEvolv2),[concat(FistEvolvB2, SecondEvolvB2)]); circle(d = DIn2);}\u041a\u043e\u0434 \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c &#171;View-&gt;Animate&#187; \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e. \u041f\u0440\u0430\u0432\u0434\u0430 \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0430\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0432 \u043f\u043e\u043b\u044f FPS \u0438 Steps \u0432\u0432\u0435\u0441\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.\u041b\u044e\u0431\u0443\u044e \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u044e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0435\u043c\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u044d\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0443\u0431\u044c\u0435\u0432 \u0438 \u0443\u0433\u043e\u043b \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0432\u044b\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u0438 \u0442\u0440\u0438.\u0421\u0430\u043c\u0430\u044f \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438 \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e-\u0436\u0435 \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u043a\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0442\u0440\u0435\u0437\u043a\u0430 \u043f\u043e \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0443 \u0431\u0435\u0437 \u0441\u043a\u043e\u043b\u044c\u0436\u0435\u043d\u0438\u044f. \u0412\u043e\u0442 \u0435\u0451 \u0444\u043e\u0440\u043c\u0443\u043b\u0430:Steps = 90;function ToRad(T) = T * (PI\/180);function Evolv_X(T, MD) = MD\/2 * (cos(T) + ToRad(T) * sin(T));function Evolv_Y(T, MD) = MD\/2 * (sin(T) &#8212; ToRad(T) * cos(T));FistEvolv_temp = [ for (a = [0 : Steps]) if (sqrt((Evolv_X(a, DMain) + RPeatch &#8212; Evolv_X(20, DMain))^2 + (Evolv_Y(a, DMain) &#8212; Evolv_Y(20, DMain) &#8212; Stx\/2)^2) &lt; ROut)  \/\/ Cut pionts outside gear[Evolv_X(a, DMain) + RPeatch &#8212; Evolv_X(20, DMain), Evolv_Y(a, DMain) &#8212; Evolv_Y(20, DMain) &#8212; Stx\/2]];FistEvolv = concat([[d &#8212; (2 + 2)* M\/2 , &#8212; Stx\/2]], FistEvolv_temp);\u041c\u044b \u043f\u0440\u043e\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448 \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0439 \u043e\u0442\u0440\u0435\u0437\u043e\u043a \u043e\u0442 \u043d\u0443\u043b\u044f \u0434\u043e 90. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u0441\u044f \u043e\u0442 \u043b\u0438\u0448\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u044b. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u0442 \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438, \u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0437\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438.\u042d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u0430 \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438 \u0438 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c. \u041d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e 2 \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u044b, \u0438 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0440\u0430\u0437\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u043e\u0447\u043a\u0438. \u041d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u0443 \u0432\u043d\u0438\u0437 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0442\u043e\u043b\u0449\u0438\u043d\u044b \u0437\u0443\u0431\u0430 \u043f\u043e \u0433\u043b\u0430\u0432\u043d\u043e\u043c\u0443 \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u0443. \u0410 \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0442\u043e\u043b\u0449\u0438\u043d\u0443 \u0437\u0443\u0431\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443. \u0418 \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0430\u043c\u0435\u0442\u0440 \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u044b \u0432 \u043d\u043e\u043b\u044c \u044f \u043d\u0430\u0445\u043e\u0436\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u044b \u043f\u0440\u0438 20 \u0433\u0440\u0430\u0434\u0443\u0441\u0430\u0445 \u0438 \u0432\u044b\u0447\u0438\u0442\u0430\u044e \u0438\u0445. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u0443 \u0432\u043d\u0438\u0437 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0442\u043e\u043b\u0448\u0438\u043d\u044b \u0437\u0443\u0431\u0430 Stx.\u041d\u0443 \u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u044d\u0432\u043e\u043b\u044c\u0432\u0435\u043d\u0442\u0443 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0437\u043d\u0430\u043a \u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b y.SecondEvolv = [ for(variable = FistEvolv)  [variable.x, -variable.y]];\u0428\u0435\u0441\u0442\u0435\u0440\u043d\u044f \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u0438\u0435\u043c.\u041d\u0443 \u0430 \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u044e \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u0438\u0435. \u0422\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u044e \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0437\u0430\u0446\u0435\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430. \u041d\u0430\u0434\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0437 \u0446\u0438\u043b\u0438\u043d\u0434\u0440\u0430 \u0432\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438. \u0412\u043e\u0442 \u043a\u043e\u0434:\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\/\/ To activate animation, select &#171;View-&gt;Animate&#187; from the\/\/ menu; this will cause three fields to appear\/\/ underneath the Preview console: Time, FPS &amp; Steps.\/\/ To commence animation, enter values into the FPS and Steps input\/\/Example FPS = 60 Steps = 120\/\/ For set initial position uncomment\/\/$t=0;\/\/Fist gear&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..Teath = 30;M = 1;PressAng = 20;C = 0.25;DPeatch = Teath * M;RPeatch = DPeatch\/2;DMain = DPeatch * cos(PressAng);St = PI * M\/2; \/\/ Teeth thickness by diameterStx = DPeatch * sin(St*(180\/PI)\/DPeatch); \/\/ Teeth thickness by chordDIn = DPeatch &#8212; 1 * M;DOut = DPeatch + (2 + C) * M;ROut = DOut \/ 2;d = sqrt((DPeatch\/2)^2 &#8212; (Stx\/2)^2);steps = 90;function ToRad(T) = T * (PI\/180);function Evolv_X(T, MD) = MD\/2 * (cos(T) + ToRad(T) * sin(T));function Evolv_Y(T, MD) = MD\/2 * (sin(T) &#8212; ToRad(T) * cos(T));FistEvolv_temp = [ for (a = [0 : steps]) if (sqrt((Evolv_X(a, DMain) + RPeatch  &#8212; Evolv_X(20, DMain))^2 + (Evolv_Y(a, DMain) &#8212; Evolv_Y(20, DMain) &#8212; Stx\/2)^2) &lt;  ROut)  \/\/ Cut pionts outside gear[Evolv_X(a, DMain)+ RPeatch &#8212; Evolv_X(20, DMain),Evolv_Y(a, DMain) &#8212; Evolv_Y(20, DMain) &#8212; Stx\/2]];FistEvolv = concat([[d &#8212; (2 + 2)* M\/2 , &#8212; Stx\/2]],FistEvolv_temp);SecondEvolv = [ for(variable = FistEvolv)[variable.x, -variable.y]];FistEvolvB = [ for(a =[0 : (len(FistEvolv) &#8212; 1)])  a];SecondEvolvB = [ for(a =[0 : (len(SecondEvolv) &#8212; 1)])len(SecondEvolv) &#8212; a &#8212; 1 + len(SecondEvolv)];rotate ([0, 0, $t*360])linear_extrude(height = 2 * M, center = true, convexity = 10, twist = 0)difference() {circle(d = DPeatch + 5 * M);for (i = [0 : (Teath -1)])rotate([0,0,(360\/Teath) * i]) polygon(concat(FistEvolv, SecondEvolv),[concat(FistEvolvB, SecondEvolvB)]); circle(d = DIn);}\/\/Second Gear&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;Teath_2 = 10;DPeatch_2 = Teath_2 * M;RPeatch_2 = DPeatch_2 \/ 2;DMain2 = DPeatch_2 * cos(PressAng);Stx_2 = DPeatch_2 * sin(St*(180\/PI)\/DPeatch_2); \/\/ Teeth thickness by chordDIn_2 = DPeatch_2 &#8212; (2 + C)* M;DOut_2 = DPeatch_2 + 2 * M;  ROut_2 = DOut_2 \/ 2;d2 = sqrt((DPeatch_2\/2)^2 &#8212; (Stx_2\/2)^2);FistEvolv_temp_2 = [ for (a = [0 : steps]) if (sqrt((Evolv_X(a, DMain2)+ (DPeatch_2\/ 2) &#8212; Evolv_X(20, DMain2))^2 + (Evolv_Y(a, DMain2) &#8212; Evolv_Y(20, DMain2) &#8212; Stx_2\/2)^2) &lt; DOut_2 \/ 2)  \/\/ Cut pionts outside gear[Evolv_X(a, DMain2)+ (DPeatch_2\/ 2) &#8212; Evolv_X(20, DMain2), Evolv_Y(a, DMain2) &#8212; Evolv_Y(20, DMain2) &#8212; Stx_2\/2]];FistEvolv_2 = concat([[d2 &#8212; (2 + 2)* M\/2 , &#8212; Stx_2\/2]],FistEvolv_temp_2);SecondEvolv_2 = [ for(variable = FistEvolv_2)[variable.x, -variable.y]];FistEvolvB_2 = [ for(a =[0 : (len(FistEvolv_2) &#8212; 1)]) a];SecondEvolvB_2 = [ for(a =[0 : (len(SecondEvolv_2) &#8212; 1)])2 * len(SecondEvolv_2) &#8212; a &#8212; 1];k = Teath \/ Teath_2;offset = 0;color( &#171;Lime&#187;, 1.0 )translate([DPeatch\/2 &#8212; DPeatch_2\/2, 0, 0])rotate([0,0,k * ($t*360) + offset])linear_extrude(height = 2 * M, center = true, convexity = 10, twist = 0) union() {for (i = [0 : (Teath_2 -1)])rotate([0,0,(360\/Teath_2) * i]) polygon(concat(FistEvolv_2, SecondEvolv_2),[concat(FistEvolvB_2, SecondEvolvB_2)]); circle(d = DIn_2);}\u0426\u0438\u043a\u043b\u043e\u0438\u0434\u043d\u044b\u0439 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440\u041c\u043d\u0435 \u0442\u0430\u043a \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u0447\u0442\u043e \u044f \u043d\u0430\u0447\u0430\u043b \u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u0436\u0435 \u043a\u0430\u043a \u0438 \u0448\u0435\u0441\u0442\u0435\u0440\u043d\u0438 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c. \u0418 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b\u043e\u0438\u0434\u043d\u044b\u0439 \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440. \u0412\u043e\u0442 \u043a\u043e\u0434:\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442\/\/ To activate animation, select &#171;View-&gt;Animate&#187; from the\/\/ menu; this will cause three fields to appear\/\/ underneath the Preview console: Time, FPS &amp; Steps.\/\/ To commence animation, enter values into the FPS and Steps input\/\/Example FPS = 60 Steps = 120\/\/ For set initial position uncomment\/\/$t=0;D = 100;R = D\/2;Dout = 5;Drol = 5;Rrol = Drol\/2;E = 0.75;I = 39;N = I + 1;DHols = 65;H = 5;Steps = 360;function Cycloyd_X(T) = (R * cos(T)) &#8212; (Rrol * cos(T + atan(sin((1 &#8212; N) * T) \/ ((R \/ (E * N)) &#8212; cos((1 &#8212; N) * T))))) &#8212; (E * cos(N * T));function Cycloyd_Y(T) = (-R * sin(T)) + (Rrol * sin(T + atan(sin((1 &#8212; N) * T) \/ ((R \/ (E * N)) &#8212; cos((1 &#8212; N) * T))))) + (E * sin(N * T));\/\/Cycloyd body&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..Cycloyd = [ for (a = [0 : Steps]) [Cycloyd_X(a), Cycloyd_Y(a)]];translate([E, 0, 0])rotate([0,0,($t*360)])linear_extrude(height = H, center = true,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-503005","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/503005","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=503005"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/503005\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=503005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=503005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=503005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}