处理中的抛物线

Parabola in Processing

我正在将任务从我的数学教科书转移到 Processing。其中一个问题需要使用抛物线。我决定将它写成贝塞尔曲线,编写代码,但有些东西不起作用。 谁能向我解释一下我在这里做错了什么?

代码:

def setup():

    background(255,255,255)

    size(800,800)

    rectMode(CENTER)

    line(400,0,400,800)

    line(0,400,800,400)

    #B 0 to know the start and the end points

    a=1

    x=3

    b=0

    c=10

    translate(width/2, height/2)

    noFill()

    beginShape()

    #Parabola formula

    y=-(a*x*x+b*x+c)

    #X of the point of the symetry

    Sx=(-b)/(2*a)

    #Y of the point of the symetry

    Sy=-(a*Sx*Sx+b*Sx+c)

    #Derivative

    Ny=-(800+b)

    #Y of the starting point

    By=-(a*400*400-b*400+c)

    #Y of the end point

    Ey=-(a*400*400+b*400+c)

    #Y3 Y4

    Ty=Ny*(x+400)-By

    bezier(-400,By,Sx,Ty,400,Ey,Sx,Ty)

    endShape()

    noFill()

    beginShape()

    for i in range (-400,400):

        x=i

        y=-i

        vertex(x,y)

    endShape()

(必须是800x800坐标平面,抛物线和直线。)

您生成的 y 坐标对于 bezier 曲线来说太高了。

如果要用线段绘制曲线,需要计算循环内的y坐标:

def setup():
    size(400, 400)
    
    background(255,255,255)
    rectMode(CENTER)
    line(width/2, 0, width/2, height)
    line(0, height/2, width, height/2)
    translate(width/2, height/2)
    
    a, b, c = 1, 10, -100
    scaleX = 0.1;
    noFill()
    strokeWeight(4)
    beginShape(LINES)
    for i in range (-400, 400):
        x = i * scaleX
        y = -(a*x*x +b*x + c)
        vertex(i, y)
    endShape()