赞 | 0 |
VIP | 12 |
好人卡 | 42 |
积分 | 7 |
经验 | 44348 |
最后登录 | 2024-4-1 |
在线时间 | 791 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 687
- 在线时间
- 791 小时
- 注册时间
- 2011-10-20
- 帖子
- 2394
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
#y=ax**2+ bx+ c
class Qua
def initialize(a=0,b=0,c=0)
@a,@b,@c=a,b,c
end
def topoint(a=@a,b=@b,c=@c)
x = (b.to_f / (-2*a))
y = get_y(x)
return "[#{x},#{y}]"
end
#坐标算函数 一般式
def run(ar1,ar2,ar3)
x1,x2,x3,y1,y2,y3=ar1[0],ar2[0],ar3[0],ar1[1],ar2[1],ar3[1]
m1=(y1-y2) / (x1-x2)
m2=(y2-y3) / (x2-x3)
m3=x1-x3
a=(m1-m2) / m3
b=m1-a*(x1+x2)
c=y1-a*(x1**2)-b*x1
return false if b**2-4*a*c < 0
@a,@b,@c = a,b,c
return a,b,c
end
#算函数 两根(y=0)+任一坐标
def walk(arr,xn,xm)
#y=a(x-x1) * x-x2
#x1*x2=c / a
#-a(x1+x2)=b
x,y = arr
a=(y.to_f / ((x-xn)*(x-xm)))
b=(-a * (xn+xm))
c=(xn * xm * a)
return false if b**2-4*a*c < 0
@a,@b,@c = a,b,c
if (a-a.floor).to_s.length > 5
a="#{y} / #{(x-xn)*(x-xm)}"
b="#{a} * #{-(xn+xm)}"
c="#{xn * xm} * #{a}" unless xn*xm == (x-xn)*(x-xm)
end
return a,b,c
end
def get_y(x)
y=(@a*x**2+@b*x+@c)
return y
end
#解2次方程
def get_x(y)
#y=ax2+bx+c
c=@c-y
return false if @b**2-4*@a*c < 0
x1= (-@b+Math.sqrt(@b**2-4*@a*c)).to_f / (2*@a)
x2= ([email protected](@b**2-4*@a*c)).to_f / (2*@a)
return x1,x2
end
#画抛物线
def draw
key=eval(topoint).to_a
orz=[-key[0],-key[1]]
if key[1]!=0
print("□"*19+"●\n");
else
print("←"+"□"*18+"●\n");
end
for i in 1..3
y1=key[1]-i*2
x1,x2=get_x(y1)
p(x1,x2)
if @a < 0
p(key[0].abs-x1.abs))
t=""
mx=(key[0].abs-x1.abs).abs
if x1 >= -19 and x1 <= key[0]
t+="□"*(20-1-mx)+"●"
end
if x2 >= -19 and x2 <= key[0]
t+="□"*(20-1-mx)+"●"
end
if x1 > key[0] and x1 <= 40
t+="□"*(mx*2-1)+"●"
end
if x2 <= 40 and x2 > key[0]
t+="□"*(2*mx-1)+"●"
end
print t+"\n"
else
#开口向下loading
end
end#循环的
end
end
$scence=Qua.new(-18,948,-10560)
p"WORK OUT a b c:"
#p $scence.walk ([0,1],-1,6)
p"TOP POINT:"
p $scence.topoint
@yy=1;p"While y=#{@yy},get X:"
p $scence.get_x(@yy)
#$scence.get_y
p $scence.run([2,2],[1,0],[3,0])
$scence.draw
|
|