/** * graviball */ int mX=64,mY=64; // Startposition Maus float planetX=mX, planetY=mY; // Startposition Ball float plavecX=0, plavecY=0; // Bewegungsvektor des Balls float x,y; // Abstand zw Ball & Maus float rQuadrat; float F; // kraft int konstanze = 32; // Gravitationskonstante*Masse1*Masse2 (willkürlich gewählt) boolean run = false, start = true; PImage bg; void setup() { size(512,128); bg = loadImage("gelb.jpg"); frameRate(20); noLoop(); smooth(); fill(70,138,2,220);// 468a01 stroke(45,90,1); strokeWeight(1.75); } void draw() { background(bg);//25,225,30); // e1e11e x = mX-(planetX); y = mY-(planetY); rQuadrat =sq(x)+sq(y); // um Division durch 0 und extrem unnatürliche Bewegungen zu vermeiden if (rQuadrat>8) { F = konstanze/rQuadrat; }else{ F=0; } // Bewegungsvektor verändern plavecX += x*F; plavecY += y*F; // vom Rand abprallen if (planetX<10) {plavecX=abs(plavecX)*0.75;} if (planetX>width-10) {plavecX=abs(plavecX)*-0.75;} if (planetY<10) {plavecY=abs(plavecY)*0.75;} if (planetY>height-10) {plavecY=abs(plavecY)*-0.75;} // neue Position planetX += plavecX; planetY += plavecY; // Ball mit Schwanz malen line(planetX,planetY,planetX-plavecX,planetY-plavecY); ellipse(Math.round(planetX),Math.round(planetY),18,18); // Mausfadenkreuz line(mX-3,mY,mX+3,mY); line(mX,mY-3,mX,mY+3); } // Startschuss void mouseMoved() { mX = mouseX; mY = mouseY; if (start) { loop(); run = true; start = false; } } // Pause void mousePressed() { if (run) { noLoop(); run = false; } else { loop(); run = true; } }