xxxxxxxxxx
203
class punkt{
constructor(x,y){
this.x=x
this.y=y
}
tegn(){
strokeWeight(5)
point(xCoord(this.x),yCoord(this.y))
strokeWeight(1)
}
}
class funktion{
constructor(a,b,A,ω,c,t,x1,x2){
this.a=a
this.k=log(a)
this.b=b
this.A=A
this.ω=ω
this.c=c
this.t=t
this.x1=x1
this.x2=x2
}
værdi(x){
if(this.t==0){
return this.a*x+this.b
} else if(this.t==1){
return this.b*pow(this.a,x)+this.A*sin(this.ω*(x-this.c))
}
}
graf(){
if(this.t==0){
line(xCoord(this.x1),yCoord(this.værdi(-O[0]/xZoom)),xCoord(this.x2),yCoord(this.værdi((w-O[0])/xZoom)))
} else if(this.t==1){
let j=this.x1
while(j<this.x2){
line(j,h-this.værdi(j),j+1,h-this.værdi(j+1))
j++
}
}
}
regina(a) {
if (a.length > 1) {
let sX = 0;
let sY = 0;
let sXY = 0;
let sXX = 0;
for (let i = 0; i < a.length; i++) {
sX += a[i].x;
sY += a[i].y;
sXY += a[i].x * a[i].y;
sXX += sq(a[i].x);
}
this.a = (a.length * sXY - sX * sY) / (a.length * sXX - sq(sX));
this.b = (sXX * sY - sX * sXY) / (a.length * sXX - sq(sX));
if(this.t==1){
this.a=exp(this.a)
this.b=exp(this.b)
}
}
}
res(a) {
let b = [];
for (let i = 0; i < a.length; i++) {
b.push(a[i].y - this.værdi(a[i].x));
}
return b;
}
rSq(a) {
let Sr = 0;
let Sy = 0;
let My = 0;
for (let i = 0; i < a.length; i++) {
Sy += a[i].y;
}
My = Sy / a.length;
Sy = 0;
for (let i = 0; i < a.length; i++) {
Sr += sq(this.res(a)[i]);
Sy += sq(a[i].y - My);
}
return 1 - Sr / Sy;
}
}
let xIn;
let yIn;
let uXin;
let uYin;
let sXm = 0;
let sYm = 0;
let e = 0;
let p = 0;
let nE = 0;
let nP = 0;
let tX = 45;
let tY = 15;
let t1w = 50;
let t2w = 50;
let m = 25;
let PmiX;
let PmaX;
let rP=200
let w=900
let h=750
let P=[[],[]]
let eP=[]
let xZoom=1
let yZoom=1
let O=[0,h]
let f=[]
let t=0
let v=0
let x=0
let th=0
function setup() {
createCanvas(w, h);
k = createInput('-0.002');
k.position(w-1.6*tX, tY);
k.size(t1w);
b = createInput('600');
b.position(w-1.6*tX, tY + m);
b.size(t1w);
A = createInput('-10')
A.position(w-1.6*tX,tY+2*m)
A.size(t1w)
ω = createInput('0.1')
ω.position(w-1.6*tX,tY+3*m)
ω.size(t1w)
c = createInput('0')
c.position(w-1.6*tX,tY+4*m)
c.size(t1w)
x1 = createInput('0');
x1.position(w-1.6*tX, tY + 5 * m);
x1.size(t2w);
x2 = createInput('600');
x2.position(w-1.6*tX, tY + 6* m);
x2.size(t2w);
}
function draw() {
background(220)
textSize(20);
text("k:", w-100,tY+17);
text("b:", w-100,tY+m+17);
text("A:", w-100,tY+2*m+17);
text("ω:", w-100,tY+3*m+17);
text("c:", w-100,tY+4*m+17);
text("x1:", w-100,tY+5*m+17);
text("x2:", w-100,tY+6*m+17);
if (keyIsDown(ENTER) && k.value() != "" && b.value() != ""&&x1.value() != ""&&x2.value() != "") {
f.push(new funktion(float(exp(k.value())), float(b.value()),float(A.value()),float(ω.value()),float(c.value()),1,float(x1.value()),float(x2.value())));
k.value("");
b.value("");
A.value("");
ω.value("");
c.value("");
x1.value("");
x2.value("");
}
for(let i=0;i<f.length;i++){
f[i].graf()
}
if(keyIsDown(32)){
if(x<f[0].x2){
b=1
th=atan(f[0].k*f[0].værdi(x)+f[0].ω*f[0].A*cos(f[0].ω*(x-f[0].c)))
v-=sin(th)/6
circle(x,yCoord(f[0].værdi(x)),30)
x+=v*cos(th)
} else{
print(th)
circle(x+t*v*60*cos(th),h+5*60*sq(t)-v*60*sin(th)*t-f[0].værdi(f[0].x2),30)
t+=1/60
}
} else {
t=0
v=0
x=0
}
}
function mousePressed() {
mX = mouseX;
mY = mouseY;
}
function mouseReleased() {
dX = mouseX - mX;
dY = mY - mouseY;
if (keyIsDown(16)) {
xZoom = xZoom * pow(1.01, dX);
O[0] = (w / 2) * (1 - pow(1.01, dX)) + O[0] * pow(1.01, dX);
yZoom = yZoom * pow(1.01, dY);
O[1] = (h / 2) * (1 - pow(1.01, dY)) + O[1] * pow(1.01, dY);
} else {
O[0] += mouseX - mX;
O[1] += mouseY - mY;
}
}
function xCoord(x){
return x*xZoom+O[0]
}
function yCoord(y){
return O[1]-y*yZoom
}