Alvaro Cassinelli / Mbed 2 deprecated skinGames_forktest

Dependencies:   mbed

Fork of scoreLight_Advanced by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Sat Mar 31 08:19:31 2012 +0000
Revision:
1:a4050fee11f7
Parent:
0:345b3bc7a0ea
Child:
4:f9d364f10335
new scorelight methods added. VERY STRANGE problem with oldPos and pos in Verlet method, that have strange behaviour depending on the value of damp factor...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedalvaro 0:345b3bc7a0ea 1 /*
mbedalvaro 0:345b3bc7a0ea 2 * elasticLoop.h
mbedalvaro 0:345b3bc7a0ea 3 * laserBlobPure
mbedalvaro 0:345b3bc7a0ea 4 *
mbedalvaro 0:345b3bc7a0ea 5 * Created by CASSINELLI ALVARO on 5/20/11.
mbedalvaro 0:345b3bc7a0ea 6 * Copyright 2011 TOKYO UNIVERSITY. All rights reserved.
mbedalvaro 0:345b3bc7a0ea 7 *
mbedalvaro 0:345b3bc7a0ea 8 */
mbedalvaro 0:345b3bc7a0ea 9
mbedalvaro 0:345b3bc7a0ea 10 #ifndef ELASTIC_LOOP
mbedalvaro 0:345b3bc7a0ea 11 #define ELASTIC_LOOP
mbedalvaro 0:345b3bc7a0ea 12
mbedalvaro 0:345b3bc7a0ea 13 // Include the basic objects to create the loop
mbedalvaro 0:345b3bc7a0ea 14 #include "soundSpot.h"
mbedalvaro 0:345b3bc7a0ea 15 #include "classPointMass.h"
mbedalvaro 0:345b3bc7a0ea 16 #include "classSpring.h"
mbedalvaro 0:345b3bc7a0ea 17
mbedalvaro 0:345b3bc7a0ea 18 #include <vector>
mbedalvaro 0:345b3bc7a0ea 19 using namespace std;
mbedalvaro 0:345b3bc7a0ea 20
mbedalvaro 0:345b3bc7a0ea 21 //#define MAX_NUM_MASSES 50
mbedalvaro 0:345b3bc7a0ea 22 //#define PI 3.1415926
mbedalvaro 0:345b3bc7a0ea 23
mbedalvaro 0:345b3bc7a0ea 24 enum ElasticLoopMode {RELAX, CONTRACT, CONTRACT_CENTRAL, CONTOUR_FOLLOWING, CONTOUR_FOLLOWING_FAST, BOUNCING};
mbedalvaro 0:345b3bc7a0ea 25
mbedalvaro 0:345b3bc7a0ea 26 class elasticLoop : public soundSpot {
mbedalvaro 0:345b3bc7a0ea 27
mbedalvaro 0:345b3bc7a0ea 28 public:
mbedalvaro 0:345b3bc7a0ea 29
mbedalvaro 0:345b3bc7a0ea 30 // Constructor and destructor:
mbedalvaro 0:345b3bc7a0ea 31 elasticLoop();
mbedalvaro 0:345b3bc7a0ea 32 ~elasticLoop();
mbedalvaro 0:345b3bc7a0ea 33
mbedalvaro 0:345b3bc7a0ea 34 // instantiation of the virtual methods of the base class (we don't need to append "virtual", but for clarity I do):
mbedalvaro 1:a4050fee11f7 35 void createBlob(int _id, ElasticLoopMode _elasticBlobMode, vector2D _initPos);
mbedalvaro 0:345b3bc7a0ea 36 virtual void setRegionMotion(int mmix, int mmiy, int mmax, int mmay); // attention: initial position posX and posY should be inside this bounding box...
mbedalvaro 0:345b3bc7a0ea 37 virtual void update(); // update dynamics of the mass loop
mbedalvaro 0:345b3bc7a0ea 38 virtual void draw(void); // draw the blob (renders on the laser trajectory object lsdTrajectory from the base class, using the openGL laser renderer - not yet done).
mbedalvaro 0:345b3bc7a0ea 39 virtual void computeBoundingBox();
mbedalvaro 0:345b3bc7a0ea 40 virtual void sendDataSpecific(void);
mbedalvaro 0:345b3bc7a0ea 41
mbedalvaro 0:345b3bc7a0ea 42 // methods that are new to this class (not in base class):
mbedalvaro 0:345b3bc7a0ea 43 void initSizeBlob(int _numMasses);
mbedalvaro 0:345b3bc7a0ea 44 void createLoopFromScafold(void);
mbedalvaro 0:345b3bc7a0ea 45 void processLoopData(); // process elastic loop data
mbedalvaro 0:345b3bc7a0ea 46
mbedalvaro 1:a4050fee11f7 47 // ====================== VARIABLES ======================
mbedalvaro 1:a4050fee11f7 48
mbedalvaro 1:a4050fee11f7 49 //ElasticLoopMode loopMode;
mbedalvaro 1:a4050fee11f7 50
mbedalvaro 0:345b3bc7a0ea 51 // The loop of masses with springs:
mbedalvaro 1:a4050fee11f7 52 int numMasses; // Number of particles in the elastic loop (this may or may not be equal to the number of points in the lsdTrajectory)
mbedalvaro 0:345b3bc7a0ea 53 vector<pointMass> massesLoop;
mbedalvaro 0:345b3bc7a0ea 54 vector<spring> loopSpringArray;
mbedalvaro 1:a4050fee11f7 55 // NOTE: to save memory, we can drop hairVector (use lightForce instead, and then normalize it when required)
mbedalvaro 0:345b3bc7a0ea 56 vector<vector2D> hairVector; // the perpendiculars to the loop
mbedalvaro 0:345b3bc7a0ea 57 vector<vector2D> lightForce;
mbedalvaro 0:345b3bc7a0ea 58 //vector2D totalLightForce; // this belongs to the base class now
mbedalvaro 0:345b3bc7a0ea 59
mbedalvaro 0:345b3bc7a0ea 60 // For the central anchor point:
mbedalvaro 0:345b3bc7a0ea 61 pointMass anchorMass;
mbedalvaro 0:345b3bc7a0ea 62 vector<spring> centralSpringArray;
mbedalvaro 0:345b3bc7a0ea 63
mbedalvaro 0:345b3bc7a0ea 64 // Detail modes (could be in a struct)
mbedalvaro 0:345b3bc7a0ea 65 // Behaviour mode:
mbedalvaro 0:345b3bc7a0ea 66 bool pseudopodesMode;
mbedalvaro 0:345b3bc7a0ea 67 bool slidingDirection; // for contour following
mbedalvaro 0:345b3bc7a0ea 68 bool springForcesOnLoop;
mbedalvaro 0:345b3bc7a0ea 69 bool lightForcesOnLoop;
mbedalvaro 0:345b3bc7a0ea 70 bool forceBorderOnLoop;
mbedalvaro 0:345b3bc7a0ea 71 bool recenteringForceOnLoop;
mbedalvaro 0:345b3bc7a0ea 72 bool nuclearForceOnLoop;
mbedalvaro 0:345b3bc7a0ea 73 bool interParticleForceOnLoop;
mbedalvaro 0:345b3bc7a0ea 74 bool forceInternalPressureOnLoop;
mbedalvaro 0:345b3bc7a0ea 75 bool recenteringForceOnNucleus;
mbedalvaro 0:345b3bc7a0ea 76
mbedalvaro 0:345b3bc7a0ea 77 // Recentering vector (obtained by rotating the total light force by an arbitrary angle) for the anchor mass, and for each point in the loop
mbedalvaro 0:345b3bc7a0ea 78 // ex: if it is 180deg, then the blob just "bounces" on the zone transition; if it is 90, it does contour following...
mbedalvaro 1:a4050fee11f7 79
mbedalvaro 1:a4050fee11f7 80 // The following are common to all blobs:
mbedalvaro 1:a4050fee11f7 81 // float angleCorrectionForceLoop;
mbedalvaro 1:a4050fee11f7 82 // vector2D recenteringVectorLoop;
mbedalvaro 0:345b3bc7a0ea 83 // float angleRecenteringVector; // auxiliary variables for sending data (for the recenteringVectorLoop)
mbedalvaro 0:345b3bc7a0ea 84 // float normRecenteringVector;
mbedalvaro 1:a4050fee11f7 85
mbedalvaro 1:a4050fee11f7 86 float angleCorrectionForceNucleus;
mbedalvaro 1:a4050fee11f7 87 vector2D recenteringVectorNucleus;
mbedalvaro 0:345b3bc7a0ea 88
mbedalvaro 0:345b3bc7a0ea 89 // Numeric parameters:
mbedalvaro 0:345b3bc7a0ea 90 float massLoopParticle;
mbedalvaro 0:345b3bc7a0ea 91 float dampMotionMassesLoop;
mbedalvaro 0:345b3bc7a0ea 92 float massAnchor;
mbedalvaro 0:345b3bc7a0ea 93 float dampMotionAnchorMass;
mbedalvaro 0:345b3bc7a0ea 94
mbedalvaro 0:345b3bc7a0ea 95 float interSpringK, interSpringRelax;
mbedalvaro 0:345b3bc7a0ea 96 float centralSpringK, centralSpringRelax;
mbedalvaro 0:345b3bc7a0ea 97 float factorLightForce;
mbedalvaro 0:345b3bc7a0ea 98 float factorRecenteringAnchorMass;
mbedalvaro 0:345b3bc7a0ea 99 float factorRecenteringLoopMass;
mbedalvaro 0:345b3bc7a0ea 100 float factorPressureLoopMass;
mbedalvaro 0:345b3bc7a0ea 101 float factorForceBorder;
mbedalvaro 1:a4050fee11f7 102 float interParticleRange, factorInterParticleForce; // zach like blob force
mbedalvaro 0:345b3bc7a0ea 103
mbedalvaro 0:345b3bc7a0ea 104 // SOUND SENDING MODES (specific to this kind of blob object):
mbedalvaro 0:345b3bc7a0ea 105 /*
mbedalvaro 0:345b3bc7a0ea 106 // (a) anchor mass data:
mbedalvaro 0:345b3bc7a0ea 107 bool sendingAnchorPosition;
mbedalvaro 0:345b3bc7a0ea 108 bool sendingAnchorForce; // this is the total force on the anchor mass, not just the recentering force
mbedalvaro 0:345b3bc7a0ea 109 bool sendingAnchorTouchWall;
mbedalvaro 0:345b3bc7a0ea 110 // (b) data from blob points:
mbedalvaro 0:345b3bc7a0ea 111 bool sendingLoopPositions;
mbedalvaro 0:345b3bc7a0ea 112 bool sendingLoopForces;// this is not just the forces from light, but all the forces in each particle
mbedalvaro 0:345b3bc7a0ea 113 bool sendingLoopForcesLight;
mbedalvaro 0:345b3bc7a0ea 114 bool sendingLoopRegions; // from this we can detect "hits"
mbedalvaro 0:345b3bc7a0ea 115 bool sendingLoopTouchWall;
mbedalvaro 0:345b3bc7a0ea 116 // (c) Blob geometry:
mbedalvaro 0:345b3bc7a0ea 117 bool sendingBlobArea;
mbedalvaro 0:345b3bc7a0ea 118 bool sendingBlobNormals;
mbedalvaro 0:345b3bc7a0ea 119 bool sendingBlobAngles; // redundant with sendingBlobNormals, but simplified (only angle of normal)
mbedalvaro 0:345b3bc7a0ea 120 */
mbedalvaro 0:345b3bc7a0ea 121
mbedalvaro 0:345b3bc7a0ea 122 };
mbedalvaro 0:345b3bc7a0ea 123
mbedalvaro 0:345b3bc7a0ea 124 #endif