山峰_康乃馨的威力_what-in-carnation

发布于 2020年2月11日
(点击图片进入关卡)

进阶练习,使用花环戒指的力量!由玩家Vlevo创建!

简介

使用绘图函数创建对象!

一定要严格遵照注释中的指示。

默认代码

twoPi = 2 * Math.PI

# 以下是绘制形状的一些函数:
def degreesToRadians(degrees):
    return (degrees/360)*twoPi

def drawPolyStars(center, radius, sides, skips, startAngle):
    angle = startAngle
    x = center.x
    y = center.y
    hero.toggleFlowers(False)
    loops = skips + 1
    stepAngle = loops * (twoPi / sides)
    if skips != 0 and (sides % loops) == 0:
        loops = skips
    endAngle = (twoPi * loops) + startAngle
    while angle <= endAngle:
        newX = x + radius * Math.cos(angle)
        newY = y + radius * Math.sin(angle)
        hero.moveXY(newX, newY)
        hero.toggleFlowers(True)
        angle += stepAngle

def drawStar(center, radius, sides, skips, startAngle):
    skipsPlusOne = skips + 1
    if ((sides/skipsPlusOne) != 1 and (sides%skipsPlusOne) == 0):
        for index in range(skipsPlusOne):
            angle = startAngle + index * (twoPi / sides)
            drawPolyStars(center, radius, sides, skips, angle)
    else:
        drawPolyStars(center, radius, sides, skips, startAngle)

def drawPolygon(center, radius, sides, startAngle):
    drawPolyStars(center, radius, sides, 0, startAngle)
def drawSpokes(center, radius, sides, startAngle):
    x = center.x
    y = center.y
    endAngle = twoPi + startAngle
    stepAngle = twoPi / sides
    angle = startAngle
    while angle < endAngle:
        newX = x + radius * Math.cos(angle)
        newY = y + radius * Math.sin(angle)
        if int(hero.pos.x) == int(x) and int(hero.pos.y) == int(y):
            hero.toggleFlowers(True)
            hero.moveXY(newX, newY)
        else:
            hero.toggleFlowers(False)
            hero.moveXY(newX, newY)
            hero.toggleFlowers(True)
            hero.moveXY(x, y)
        hero.toggleFlowers(False)
        angle += stepAngle

def ternary(thisOne, condition, thatOne):
    if condition:
        return thisOne
    else:
        return thatOne

def drawSpiral(center, size, loopNum, startAngle):
    x = center.x
    y = center.y
    hero.toggleFlowers(False)
    hero.moveXY(x, y)
    hero.toggleFlowers(True)
    steps = size * 2
    direction = Math.sign(loopNum)
    stepAngle = twoPi / steps / direction
    loops = direction * loopNum
    stepSize = size / steps / loops
    curSize = 0
    angle = startAngle
    endAngle = (twoPi * loopNum) + startAngle
    while ternary((angle>=endAngle),(loopNum<0),(angle<=endAngle)):
        newX = x + curSize * Math.cos(angle)
        newY = y + curSize * Math.sin(angle)
        hero.moveXY(newX, newY)
        angle += stepAngle
        curSize += stepSize
    newX = x + size * Math.cos(endAngle)
    newY = y + size * Math.sin(endAngle)
    hero.moveXY(newX, newY)

redX = {"x": 28, "y": 36}
whiteX = {"x": 60, "y": 36}

# --------------------------------------------------

#setFlowerColor

# 使用drawPolygon和drawSpokes函数绘制“3D样式”框,以红色X为中心,大小为10。
# 计算最简单的StangtLes使用“up”或“down”。
# 绘图函数用弧度处理角度。 如果你在度数方面由疑虑,那么请使用“degreesToRadians(degrees)”函数,以便理解。
#drawPolygon(center, size, number of sides, start angle)

#drawSpokes(center, size, number of spokes, start angle)

# 绘制星星围兜,使用drawStar和drawSpiral函数。 (请参阅指南了解形状的图像。)
# 星星以白色X为中心,大小为6。
# 螺旋的大小为15.为了让螺旋走向另一个方向,给它一个负数的循环。
#setFlowerColor

#drawStar(center, size, sides, skips, startAngle)

#setFlowerColor

#drawSpiral(center, size, number of loops, start angle)

#drawSpiral(center, size, number of loops, start angle)

概览

我们的目标是使用四个绘图函数drawPolygon,drawStar,drawSpiral和drawSpokes来绘制本图中的两个图案。

一个3D风格方框和一个带星星的婴儿围兜。

选择初始角startAngle可能是绘制酷炫图案一开始最难的部分。这些函数使用的角基于被划分为2π弧度的圆周

从右/东开始记为0,逆时针旋转经过右/东,上/北,左/西,下/南,直到再次到达右/东(0和2π是相同的角度)。

如果对弧度不熟悉,你可以使用已有的度数/弧度转换函数,也可以将角度看作圆一部分,用1/2、2/3、4/7,或表示圆的一部分的任意分数,乘以整圆2π。

如果是从正左/西开始,那就是180度,这也就是圆周的一半:1/2 * 2π = π弧度(也就是3.1415926535 ...)

康乃馨的威力解法

本关为可选的挑战关卡,暂无标准通关代码