This page last changed on May 08, 2006 by schank.

Notes from Ed's May 8, 2006 Visit

Agenda items

  • How to view logged data
  • Assessment 3
  • Beaver Creek Jump (Assmt 3)
  • Pole Maneuver (Assmt 3)
  • Experiment with Fish World

How to view logged student data

To view our pilot data, we need to get access to the database on the Concord Consortium's server. We may be able to send queries to it directly through structured queries, or we can use their browser interface to look at the raw data after it's been decrypted.

Paul Burney (pburney@concord.org) is the person to contact to gain access to the server (and verify that we have permissions).

We can also ask Barbara Buckley to send us the data (she has access to the database).

Assessment 3

We're ready to start work on assessment 3. (Assessment 1 is being pilot tested, and Assessment 2 is done except for images from Lynne for Cliff.)

Zaz works on creating a skeleton/frame for Assessment 3. She is also renaming the image and string variable file names(retroactively) to be more consistent (e.g., start with the name of the segment, like hillXXX). Thank you, thank you, thank you, Zaz!

We're not sure what to do about Avalanche, because there are no storyboards for it.

Question for team: Will there be an Avalanche section or will it be dropped? When will there be storyboards for it if we are keeping it?

Beaver Creek Jump (Assmt 3)

Just use a 2 flat walls (ground around stream) and 1 inclined wall (set the shape and direction to be an incline) and place the atom on the floor with initial velocity (3 m/s?). Turn on gravity, and go!

function enter() {
   // NOTE: THIS HASN'T BEEN TESTED; it's just the general idea 

   var groundLeftOfStream = JWall.createWall(X1, Y1, 200, 1, false); 
   objView.addElement(groundLeftOfStream);

   var groundRightOfStream = JWall.createWall(X2, Y2, 200, 1, false); 
   objView.addElement(groundRightOfStream);

   // The incline, 15 pixels long at a 20 degree angle
   var incline = JWall.createSlopedWall(X, Y, 15, 1, 20); 
   objView.addElement(incline);

   var world = objView.getWorldModel();
   world.setGravity(0.0, -1.0);

   // create the sled atom with an initial velocity
   sledAtom = JAtom.createAtom(X,Y,0,0);
   sledAtom.setVx(VELOCITY);
}
   
function view()
{
	objView.start();
	objView.repaint();
}

to turn gravity on, and go!

Pole Maneuver (Assmt 3)

Dima suggested we use CCBedSpringForce. We emailed Paul and Qing to get an example of how CCBedSpringForce works. They can't get it to work; Ed calls Paul to see if we can reach Dima; we can't. We break for lunch... After lunch, Ed and I spend an hour and get it to work! Here's the code:

var redAtom, greenAtom, bedForce, bedForceCalculator;

// what values do I need to use to create a perfect circle?
var K = 1;
var LENGTH = 5.0;

//Origin of the world. world elements are placed in pixel space relative to this
var ORIGIN_X = 200;
var ORIGIN_Y = 240;

//"needScreenResolution" is the number of pixels per "unit"
var SCREEN_RESOLUTION = 10

//"gridIntervalCm" is, according to one comment, "Units Per Grid Square"
var GRID_INTERVAL = 1

function enter()
{
    // set up world
	setupObjectViewAndWorld();

    // set up atoms
	redAtom = JAtom.createAtom(0,0,0,0);
	greenAtom= JAtom.createAtom(100,0,0,0);

	setAtoms(10000, redAtom, Color.red);
	setAtoms(10, greenAtom, Color.green);

    greenAtom.setVy(10.0);

    // create bedspringforce
	bedForce = new CCBedSpringForce(K,true);
	bedForce.setL0(LENGTH);
	bedForce.setAtoms(redAtom,greenAtom);
    bedForce.setDrawSpring(true);
    bedForce.setDrawForce(true);

    redAtom.applyForce(bedForce);
    greenAtom.applyForce(bedForce);

    // this seems to be worthless
    //bedForceCalculator = new CCBedSpringForceCalculator(K, LENGTH, true);
    //redAtom.setForceCalculator(bedForceCalculator);
    //greenAtom.setForceCalculator(bedForceCalculator);

    // create a wall to bounce off of (we don't go all the way around)
    // remove this if you want an orbit!
    var ground = JWall.createWall(-200, -20, 400, 3, false); 
    objView.addElement(ground);
}

function setAtoms(mass, atom, color)
{
	atom.setMass(mass);
	atom.setColor(color);
	atom.setR(10);
	atom.setProperty("showvel",true);
	atom.setProperty("showvelnumber",true);
	atom.setProperty("dotrace",true);
	atom.setTraceProperties(0,1, 10);

	objView.addElement(atom);
}

function view()
{
	objView.start();
	objView.repaint();
}


function setupObjectViewAndWorld() {

	objView.clearAll()
	objView.clearBackgroundIcon()
	objView.setBackground(Color.white);

	objView.setGrid();
	objView.setNeedScreenResolution(SCREEN_RESOLUTION);
	objView.setGridIntervalCm(GRID_INTERVAL);
	objView.setSnapToGrid(true, true)
	objView.getGrid().setIntervalMajor(5,5)
	objView.setAtomsDragMode(GUIPanel.DRAG_MODE_NONE);

	objView.setDaemonsDragMode(GUIPanel.DRAG_MODE_DAEMON);
	objView.setDrawAtomsThenDaemons(true);
	objView.setShowUnitLabels(true);
	objView.setShowForceNumber(true);
	objView.setWorldOrigin(ORIGIN_X, ORIGIN_Y);

	var world = objView.getWorldModel();

    // test: turn on gravity to see if something happens
    // takes x and y force components
    // Note: use setGravity in the Beaver Creek Jump section
    //world.setGravity(0.0, -1.0);
}

Experiment with Fish World

We flipped through the storyboard from Carlos dated 3/20/06, and discussed how each page would be done. Here are the storyboards:

AquaticSystem3-20-06.pdf

The first few pages (1-4) are non-interactive animations of an ROV decending and exploring the lake. We'll have Aaron create these as animated GIFs. (No need for Flash if we can avoid it; it requires a special install of Quicktime which we'd like to avoid.)

The majority of the pages (5-17) show a mix of static images and side-views of fishes swimming around the lake. For the swimming views, we won't use Flash, because we can just use Dynamica to generate the simulation. We'll have Aaron create one or more background images, and images for each organism, and use Dynamica to make organisms atoms that have velocities and change direction based on some simple (collision) rules. We'll also add a mouse listener so that if you click on an atom you can see the name of the organism. Page 14 asks the students to draw arrows between organisms to show a food web; we can just use the velocity or force arrows (just don't run the simulation!).

The final pages (18-24) use the FishWorld engine. The storyboard shows a zoomed-in vertical view instead of the total-population top view that is built into FishWorld. Ed suggests that if we want a zoomed-in side view of the population, we could use Dynamica to show a subset of the population: Map a portion of the whole population to a Dynamica screen that shows a small vertical cross-section of the population. We'd have to create some random Z positions (since the FishWorld population doesn't have levels, just X,Y positions for each organism). We could show BOTH views (size zoom-in AND top-down population) although that could slow things down (lots rendering) and would take up more space on the screen.

Question for team: Do we need a zoomed-in vertical view in the population simulation pages? (It's not built in, but it can probably be done, though it will add time, maybe a week.)

Ed notes that the graph would graph for the entire population. The graph has a memory leak at the moment so we can't test with it.

We played with the PredatorPreyPopulation2.jar at

http://wise25.concord.org/workspaces/wise25/Build/Activity/Biology/Genetics/

to see how hard it might be to create a mapping from a segment of the whole-population simulation to a small vertical cross-section shown in Dynamica.

Things we noted with the PreditorPreyPopulation2.jar:

  • When you open PredatorPreyPopulation2.jar in ACE, there are several nodes at the top level. The only node of interest to us for the Fish World assessments is the Population node.
  • The code under the Population node may be changing, so we shouldn't change code in there, but rather create our own node, perhaps called FishWorld.
  • The meat of the code that we care about (the simulation code) is in the Organism class.
  • (For Ed) Some simulation-related code (like setFood) is in TerrainEngView; should probably be refactored since this isn't view-related. (Need to separate the model from the view!)
  • We'll need events from the simulation for things like feeding, mating, birth and dying, if we want to represent them in our custom zoomed-in vertical view. (There don't seem to be events generated in Biologica for these.) Or, we might be to ask Organism to do each step and after each call check the values.

AquaticSystem3-20-06.pdf (application/pdf)
Document generated by Confluence on Jan 27, 2014 16:57