{"id":33112,"date":"2026-07-26T21:16:23","date_gmt":"2026-07-26T19:16:23","guid":{"rendered":"https:\/\/www.valcon.it\/vpython\/?p=33112"},"modified":"2026-10-11T10:40:47","modified_gmt":"2026-10-11T08:40:47","slug":"ipocicloidi","status":"publish","type":"post","link":"https:\/\/www.valcon.it\/vpython\/ipocicloidi\/","title":{"rendered":"Ipocicloidi"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Una circonferenza fissa al centro di raggio <strong>a<\/strong>.<br>Una seconda circonferenza di raggio <strong>b<\/strong> rotola lungo il bordo <strong>interno<\/strong> della prima. <br>L&#8217;estremo del suo raggio traccia una curva continua, un&#8217;<strong>ipocicloide<\/strong>.<br><\/p>\n\n\n\n<iframe loading=\"lazy\" width=\"100%\" height=\"800\" src=\"https:\/\/www.glowscript.org\/#\/user\/ValCon\/folder\/Inviluppi\/program\/ipocicloidi\"><\/iframe>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nWeb VPython 3.2\n\nMAX = 10\n\na = 10\nb = 9\n\ndef mcd(c, d):\n    if(d == 0): return c\n    else:       return mcd(d, c % d)\n\ndef linspace(start, stop, num):\n    step = (stop - start) \/ (num - 1)\n    return &#x5B;start + i * step for i in range(num)]\n\ndef disabilita(STATO):    \n    for i in range(1, MAX):\n        r_a&#x5B;i].disabled = STATO\n    for i in range(0, MAX-1):\n        r_b&#x5B;i].disabled = STATO\n\ndef disegna():\n    global g, a, b\n    g.delete()\n    \n    max_ab = 1.1*a\n\n    g = graph(width = 640    , height = 640    , background = color.black,\n              xmin  = -max_ab, ymin   = -max_ab,\n              xmax  = +max_ab, ymax   = +max_ab)    \n    \n    gC = gcurve(color = color.gray(.25), width=3)\n    for angolo in linspace(0, 2*pi, 60):\n        x = a*cos(angolo)\n        y = a*sin(angolo)\n        gC.plot(x, y)\n    sleep(0.5)\n\n    gc = gcurve(color = color.gray(.75), width=3)\n    def circonferenza(xc, yc, r):\n        gc.data = &#x5B;]\n        for angolo in linspace(0, 2*pi, 50):\n            x = xc + r*cos(angolo)\n            y = yc + r*sin(angolo)\n            gc.plot(x, y)\n    \n    circonferenza(0, 0, a)        \n    g2 = gcurve(color = color.blue, width=4)\n    \n    mcd_ab = mcd(a, b)\n    A = a\/mcd_ab\n    B = b\/mcd_ab\n    \n    \n    START  = 0\n    STOP   = B * (2*pi)\n    NUMERO = 200    \n\n    finale = &#x5B;]\n    for angolo in linspace(START, STOP, NUMERO, endpoint = True):\n        rate(30)\n        x1  = (a-b)*cos(angolo)\n        y1  = (a-b)*sin(angolo)\n        circonferenza(x1, y1, b)\n        \n        angolo2 = (a-b)\/b*angolo\n        x2  = x1+b*cos(angolo2)\n        y2  = y1-b*sin(angolo2)\n        \n        x3  = x1-b*cos(angolo2)\n        y3  = y1+b*sin(angolo2)\n\n        g2.data = &#x5B;]\n        g2.plot(x2, y2)\n        g2.plot(x3, y3)\n    \n        finale.append((x2, y2))  \n\n        gc3 = gcurve(color = color.yellow, width = 5)\n        for p in finale:\n            gc3.plot(p)\n    \n    sleep(0.5)\n    gc.data = &#x5B;]\n    g2.data = &#x5B;]\n    disabilita(False)\n\ndef bind_a(evt):\n    global a, b\n    a = int(evt.text)    \n    if(b &gt;= a):\n        b = a-1\n        r_b&#x5B;b-1].checked = True\n    for i in range(0, a-1):\n        r_b&#x5B;i].disabled = False\n    for i in range(a-1, MAX):\n        r_b&#x5B;i].disabled = True\n    \ndef bind_b(evt):\n    global b\n    b = int(evt.text)\n    r_b&#x5B;b-1].checked = True\n    \ndef bind_disegna(evt):\n    disabilita(True)\n    disegna()\n    disabilita(False)\n\nscene.append_to_caption(&quot;R:\\t&quot;)\nr_a = &#x5B;]\nfor i in range(1, MAX+1):\n    r_a.append(radio(bind = bind_a, name = &quot;a&quot;, text = str(i)))\n    scene.append_to_caption(&quot; &quot;)\nr_a&#x5B;0].disabled = True\nr_a&#x5B;MAX-1].checked = True\n\nscene.append_to_caption(&quot;\\t&quot;)\nbutton(bind = bind_disegna, text = &quot;Disegna!&quot;)\n\nscene.append_to_caption(&quot;\\nr:\\t&quot;)\nr_b = &#x5B;]\nfor i in range(1, MAX+1):\n    r_b.append(radio(bind = bind_b, name = &quot;b&quot;, text = str(i)))\n    scene.append_to_caption(&quot; &quot;)\nr_b&#x5B;MAX-1].disabled = True    \nr_b&#x5B;MAX-2].checked = True\n\nscene.append_to_caption(&quot;\\n\\n&quot;)\nscene.delete()\ng = graph()\ndisegna()\n<\/pre><\/div>","protected":false},"excerpt":{"rendered":"<p>Una circonferenza fissa al centro di raggio a.Una seconda circonferenza di raggio b rotola lungo il bordo interno della prima. L&#8217;estremo del suo raggio traccia una curva continua, un&#8217;ipocicloide.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[17,18],"class_list":["post-33112","post","type-post","status-publish","format-standard","hentry","category-appl-2d","tag-interazione","tag-web"],"_links":{"self":[{"href":"https:\/\/www.valcon.it\/vpython\/wp-json\/wp\/v2\/posts\/33112","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.valcon.it\/vpython\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.valcon.it\/vpython\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.valcon.it\/vpython\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.valcon.it\/vpython\/wp-json\/wp\/v2\/comments?post=33112"}],"version-history":[{"count":7,"href":"https:\/\/www.valcon.it\/vpython\/wp-json\/wp\/v2\/posts\/33112\/revisions"}],"predecessor-version":[{"id":33503,"href":"https:\/\/www.valcon.it\/vpython\/wp-json\/wp\/v2\/posts\/33112\/revisions\/33503"}],"wp:attachment":[{"href":"https:\/\/www.valcon.it\/vpython\/wp-json\/wp\/v2\/media?parent=33112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.valcon.it\/vpython\/wp-json\/wp\/v2\/categories?post=33112"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.valcon.it\/vpython\/wp-json\/wp\/v2\/tags?post=33112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}