如何在两个都以同一点为中心的八角形内绘制八角形?

How to draw octagon inside an octagon where both centered in same point?

如何使用 Python 在乌龟中以同一点为中心的八边形内绘制八边形? 这是我到目前为止所做的:

import turtle

for i in range(8):
    turtle.forward(100)
    turtle.right(360/8)

    turtle.pendown()

    turtle.goto(20, -20)


    turtle.penup()


    for i in range(8):
           turtle.forward(40)
           turtle.right(360/8)

只需放下笔,在第一个 for 循环中追踪第一个五边形,行进第一条线的一半距离,然后从那里开始新的较小的八边形

import turtle

turtle.pendown()
for i in range(8):
    turtle.forward(100)
    turtle.right(360/8)

turtle.forward(50)
for i in range(8):
       turtle.forward(FIGURE OUT WHAT THE NEW DISTANCE IS)
       turtle.right(360/8)

如果跳到点 20,-20 并从八边形 40 长度开始很重要,那么这就是版本

import turtle

turtle.pendown()
for i in range(8):
    turtle.forward(100)
    turtle.right(360/8)

turtle.penup()
turtle.goto(20, -20)
turtle.pendown()

for i in range(8):
       turtle.forward(40)
       turtle.right(360/8)

记住 points on a circle 是由公式

给出的
x = r * cos(theta)
y = r * sin(theta)

其中 r 是半径,theta 是从原点延伸到点的射线与 x 轴所夹的角。八边形的顶点在圆上等距分布。因此,如果我们选择从 0 到 2 pi 弧度的等间距 thetas,那么我们将得到一个八边形的顶点:

import turtle
from math import pi, cos, sin

def ngon(n, dist, phase, shift=(0,0)):
    theta = 2 * pi / n
    x0, y0 = shift
    turtle.penup()
    x = dist * cos(phase) + x0
    y = dist * sin(phase) + y0
    turtle.goto(x, y)
    turtle.pendown()
    for i in range(1, n+1):
        x = dist * cos(i*theta + phase) + x0
        y = dist * sin(i*theta + phase) + y0
        turtle.goto(x, y)

def demo_ngon():
    turtle.speed(0.1)
    turtle.width(2.0)
    ngon(8, dist=100, phase=0)
    ngon(8, dist=68, phase=0)
    turtle.mainloop()

demo_ngon()
import turtle

for i in range(8):
    turtle.forward(100)
    turtle.right(360/8)

turtle.forward(50)
for i in range(8):
       turtle.forward(40)
       turtle.right(360/8)