physics/test.md

6.5 KiB

Slide 1

title Test Drawing!
caption This is a test
scale 2.0
buttons
frame 0 0 200 100
axes 200 100
point p1 _.oscillatingPoint([20, 20], [80, 20], 3000)
fill cyan
square p1 1000
point p2 [100, 30]
fill red
circle p2
point p3 [ _.oscillatingValue(20, 80, 3000), 
  _.oscillatingValue(20, 80, 3000, Math.PI/2) ]
fill green
circle p3 1000
start

Slide 2

title Sine Wave
caption `y = sin(x)`
scale 64
frame 0 -1 2*Math.PI 1
stroke black 4
eval _.line([0, -1], [0, 1])
eval _.line([0, 0], [2*Math.PI, 0])
stroke red 2
func Math.sin(x)

Slide 3

title Oscillating Sine Wave
caption `y = sin(x) * sin(t)`
scale 64
frame 0 -1 2*Math.PI 1
stroke black 4
eval _.line([0, -1], [0, 1])
eval _.line([0, 0], [2*Math.PI, 0])
stroke red 2
func Math.sin(x) * _.oscillatingValue(-1, 1, 500)
start

Slide 4

title Travelling Sine Wave
caption `y = sin(x + t)`
scale 64
frame 0 -1 2*Math.PI 1
stroke black 4
eval _.line([0, -1], [0, 1])
eval _.line([0, 0], [2*Math.PI, 0])
stroke red 2
func Math.sin(x + 2*Math.PI*_.t / 1000)
start

Slide 4

title Sine * Cosine
caption `y = sin(x) * cos(x)`
scale 64
frame 0 -1 2*Math.PI 1
stroke black 4
eval _.line([0, -1], [0, 1])
eval _.line([0, 0], [2*Math.PI, 0])
stroke red 1
func Math.sin(x)
stroke blue 1
func Math.cos(x)
stroke purple 2
func Math.sin(x) * Math.cos(x)
start

scale 2
title Projectile
caption `x = v_(0x) t`<br>`y = v_(0y) t - g t^2`
frame -10 -50 300 80
stroke black 4
eval _.polyline([0, 100], [0, 0], [300, 0]);
value v0 50
value angle Math.PI / 180 * 45;
fill green
eval _.text([10, 0], '45°')
value v0x _.getValue('v0') * Math.cos(_.getValue('angle'))
value v0y _.getValue('v0') * Math.sin(_.getValue('angle'))
eval _.text([_.getValue('v0x') / 2, _.getValue('v0y') / 2], `${_.getValue('v0')} m/s`, {align: 'right'});
point p1 (function() {
  const t = _.t / 1000;
  const v0x = _.getValue('v0x');
  const v0y = _.getValue('v0y');
  const g = 9.81;
  const x = v0x * t;
  const y = v0y * t - g * t**2 / 2;
  const vy = v0y - g * t;
  const vyp = v0y - g * (t - _.dt/1000);
  if (vy < 0 && vyp >= 0) {
    _.setFill('red');
    _.circle([x, y]);
    _.setStroke('green', 2);
    _.arrow([x, y], [x + v0x, y + vy]);
  }
  if (t > 0 && (y <= 0 || x >= _.frame[1][0])) {
    _.setFill('red');
    _.circle([x, y]);
    _.setStroke('green', 2);
    _.arrow([x, y], [x + v0x, y + vy]);
    _.stop();
    _.t = 0;
    _.text([x, y + 10], `x = ${Math.ceil(x)} m`);
    return [0, 0];
  }
  return [x, y];
 })()
point p2 (function() {
  const t = _.t / 1000;
  const v0x = _.getValue('v0x');
  const v0y = _.getValue('v0y');
  const g = 9.81;
  const x = v0x * t;
  const y = v0y * t - g * t**2 / 2;
  const vy = v0y - g * t;
  const v = new Vector([v0x, vy]);
  const r = new Vector([x, y]);
  const p2 = r.add(v);
  return p2.array; 
 })()
stroke orange 2
eval _.arrow('p1', 'p2');
stroke green 2
eval _.arrow([0, 0], [_.getValue('v0x'), _.getValue('v0y')])
fill blue
eval const projectile = d.circle('p1', {trace: {age: -1}});
  d.onStart(() => {
    if (d.t == 0) {
      projectile.reset();
    }
  })
start

45° ± 15°

scale 2
frame -10 -50 300 80
stroke black 4
eval _.polyline([0, 100], [0, 0], [300, 0]);
value v0 50
value angle Math.PI / 180 * 30;
fill green
eval _.text([20, 0], '30°')
value v0x _.getValue('v0') * Math.cos(_.getValue('angle'))
value v0y _.getValue('v0') * Math.sin(_.getValue('angle'))
eval _.text([_.getValue('v0x') / 2, _.getValue('v0y') / 2], `${_.getValue('v0')} m/s`, {align: 'right'});
point p1 (function() {
  const t = _.t / 1000;
  const v0x = _.getValue('v0x');
  const v0y = _.getValue('v0y');
  const g = 9.81;
  const x = v0x * t;
  const y = v0y * t - g * t**2 / 2;
  const vy = v0y - g * t;
  const vyp = v0y - g * (t - _.dt/1000);
  if (vy < 0 && vyp >= 0) {
    _.setFill('red');
    _.circle([x, y]);
    _.setStroke('green', 2);
    _.arrow([x, y], [x + v0x, y + vy]);
  }
  if (t > 0 && (y <= 0 || x >= _.frame[1][0])) {
    _.setFill('red');
    _.circle([x, y]);
    _.setStroke('green', 2);
    _.arrow([x, y], [x + v0x, y + vy]);
    _.stop();
    _.t = 0;
    _.text([x, y + 10], `x = ${Math.ceil(x)} m`);
    return [0, 0];
  }
  return [x, y];
 })()
point p2 (function() {
  const t = _.t / 1000;
  const v0x = _.getValue('v0x');
  const v0y = _.getValue('v0y');
  const g = 9.81;
  const x = v0x * t;
  const y = v0y * t - g * t**2 / 2;
  const vy = v0y - g * t;
  const v = new Vector([v0x, vy]);
  const r = new Vector([x, y]);
  const p2 = r.add(v);
  return p2.array; 
 })()
stroke orange 2
eval _.arrow('p1', 'p2');
stroke green 2
eval _.arrow([0, 0], [_.getValue('v0x'), _.getValue('v0y')])
fill blue
eval const projectile = d.circle('p1', {trace: {age: -1}});
  d.onStart(() => {
    if (d.t == 0) {
      projectile.reset();
    }
  })
start
scale 2
frame -10 -50 300 100
stroke black 4
eval _.polyline([0, 100], [0, 0], [300, 0]);
value v0 50
value angle Math.PI / 180 * 60;
fill green
eval _.text([10, 0], '60°')
value v0x _.getValue('v0') * Math.cos(_.getValue('angle'))
value v0y _.getValue('v0') * Math.sin(_.getValue('angle'))
eval _.text([_.getValue('v0x') / 2, _.getValue('v0y') / 2], `${_.getValue('v0')} m/s`, {align: 'right'});
point p1 (function() {
  const t = _.t / 1000;
  const v0x = _.getValue('v0x');
  const v0y = _.getValue('v0y');
  const g = 9.81;
  const x = v0x * t;
  const y = v0y * t - g * t**2 / 2;
  const vy = v0y - g * t;
  const vyp = v0y - g * (t - _.dt/1000);
  if (vy < 0 && vyp >= 0) {
    _.setFill('red');
    _.circle([x, y]);
    _.setStroke('green', 2);
    _.arrow([x, y], [x + v0x, y + vy]);
  }
  if (t > 0 && (y <= 0 || x >= _.frame[1][0])) {
    _.setFill('red');
    _.circle([x, y]);
    _.setStroke('green', 2);
    _.arrow([x, y], [x + v0x, y + vy]);
    _.stop();
    _.t = 0;
    _.text([x, y + 10], `x = ${Math.ceil(x)} m`);
    return [0, 0];
  }
  return [x, y];
 })()
point p2 (function() {
  const t = _.t / 1000;
  const v0x = _.getValue('v0x');
  const v0y = _.getValue('v0y');
  const g = 9.81;
  const x = v0x * t;
  const y = v0y * t - g * t**2 / 2;
  const vy = v0y - g * t;
  const v = new Vector([v0x, vy]);
  const r = new Vector([x, y]);
  const p2 = r.add(v);
  return p2.array; 
 })()
stroke orange 2
eval _.arrow('p1', 'p2');
stroke green 2
eval _.arrow([0, 0], [_.getValue('v0x'), _.getValue('v0y')])
fill blue
eval const projectile = d.circle('p1', {trace: {age: -1}});
  d.onStart(() => {
    if (d.t == 0) {
      projectile.reset();
    }
  })
start