处理中的抛物线
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()
我正在将任务从我的数学教科书转移到 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()