Skolekoding.no > Tekst-koding > p5.js > NOC trinn for trinn
Forslag til løsning av oppgave 9
- let ax, ay, bx, by;
- let pencil_x, pencil_y; // Pennens koordinater
- let angleA, angleB;
- let speedA, speedB;
- let track = []; // Tabell
- let AoverB; // Hastigheten til A i forhold til B
- let speedAdjust;
- let v; // Vektor med pennens koordinater
- function setup() {
- createCanvas(400, 400);
- noFill();
- angleA = 0.0;
- angleB = 0.0;
- // Endre teller og nevner for å få andre mønstre
- AoverB = 4 / 3;
- // Hastigheten må nedjusteres
- speedAdjust = 0.05;
- speedA = AoverB * speedAdjust;
- speedB = 1 * speedAdjust;
- }
- function draw() {
- background(220);
- strokeWeight(1);
- ellipse(100, 100, 100);
- ellipse(300, 300, 100);
- ax = 100 + cos(angleA) * 50;
- ay = 100 + sin(angleA) * 50;
- bx = 300 + cos(angleB) * 50;
- by = 300 + sin(angleB) * 50;
- pencil_x = bx;
- pencil_y = ay;
- strokeWeight(1);
- line(ax, ay, pencil_x, pencil_y); // Vannrett
- line(bx, by, pencil_x, pencil_y); // Loddrett
- v = createVector(pencil_x, pencil_y);
- track.push(v); // Legg til v sist i tabellen
- if (track.length > 800) {
- track.splice(0, 1); // Tar bort 1 celle fra og med celle [0]
- }
- for (i = 0; i < track.length; i++) {
- strokeWeight(1);
- point(track[i].x, track[i].y);
- }
- strokeWeight(4);
- point(ax, ay);
- point(bx, by);
- point(pencil_x, pencil_y);
- angleA = angleA + speedA;
- angleB = angleB + speedB;
- }
Oppgave 10
A) Skriv den aktuelle brøken på lerretet slik som hos Roger Antonsen
B) Hva med å generere tilfeldige verdier for teller og nevner når venstre museknapp trykkes?
C) Eller hva med å legge inn glidebrytere for å velge verdier for teller og nevner?
Disse 10 oppgavene kan løses på mange andre måter enn
de som er presentert her, f. eks. med objekter eller med
dobbel løkke med x og y i stedet for vektor. Her er ingen fasit 🙂
Her er en litt annen versjon som bruker objekter.
Les mer om objekter i p5.js her.
Objekter forklart på processing.org oversatt til norsk.
skolekoding.no
Stein Olav Kivle