Alvaro Cassinelli
/
skinGames_forktest
just a test
Fork of scoreLight_Advanced by
blobConfig.cpp@18:d72935b13858, 2012-04-28 (annotated)
- Committer:
- mbedalvaro
- Date:
- Sat Apr 28 12:35:21 2012 +0000
- Revision:
- 18:d72935b13858
- Parent:
- 14:0fc33a3a7b4b
- Child:
- 19:228430f1350e
this works pretty nicely. I will change some parameters on the elastic loop, as well as compute the KINETIC ENERGY
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbedalvaro | 0:345b3bc7a0ea | 1 | |
mbedalvaro | 0:345b3bc7a0ea | 2 | #include "blobConfig.h" |
mbedalvaro | 0:345b3bc7a0ea | 3 | #include "hardwareIO.h" // this is in fact only to get to know the initial position of the spots, as well as the mirror limits to set the bounding box for the blobs |
mbedalvaro | 0:345b3bc7a0ea | 4 | |
mbedalvaro | 0:345b3bc7a0ea | 5 | blobConfig::blobConfig(): numBlobs(0) { |
mbedalvaro | 1:a4050fee11f7 | 6 | //blobArray.clear();// there is no need to do this, the vector does not contains anything here. |
mbedalvaro | 1:a4050fee11f7 | 7 | |
mbedalvaro | 0:345b3bc7a0ea | 8 | } |
mbedalvaro | 0:345b3bc7a0ea | 9 | |
mbedalvaro | 0:345b3bc7a0ea | 10 | blobConfig::~blobConfig() { |
mbedalvaro | 1:a4050fee11f7 | 11 | clearConfig(); |
mbedalvaro | 1:a4050fee11f7 | 12 | |
mbedalvaro | 0:345b3bc7a0ea | 13 | } |
mbedalvaro | 0:345b3bc7a0ea | 14 | |
mbedalvaro | 0:345b3bc7a0ea | 15 | // =========================================== STANDARD CONFIGURATIONS ============================================================================= |
mbedalvaro | 0:345b3bc7a0ea | 16 | |
mbedalvaro | 0:345b3bc7a0ea | 17 | void blobConfig::computeBoundingBox() { |
mbedalvaro | 1:a4050fee11f7 | 18 | for (int i=0; i<blobArray.size(); i++) { |
mbedalvaro | 1:a4050fee11f7 | 19 | blobArray[i]->computeBoundingBox(); |
mbedalvaro | 1:a4050fee11f7 | 20 | } |
mbedalvaro | 0:345b3bc7a0ea | 21 | } |
mbedalvaro | 0:345b3bc7a0ea | 22 | |
mbedalvaro | 0:345b3bc7a0ea | 23 | void blobConfig::clearConfig() { |
mbedalvaro | 1:a4050fee11f7 | 24 | for (int i=0; i<blobArray.size(); i++) delete blobArray[i]; // we must delete the pointer created with new, so the memory for the object is liberated (calls its destructor) |
mbedalvaro | 1:a4050fee11f7 | 25 | blobArray.clear(); |
mbedalvaro | 1:a4050fee11f7 | 26 | numBlobs=0;// this is just equal to blobArray.size() |
mbedalvaro | 0:345b3bc7a0ea | 27 | } |
mbedalvaro | 0:345b3bc7a0ea | 28 | |
mbedalvaro | 1:a4050fee11f7 | 29 | void blobConfig::addOneElasticLoopRelax() { |
mbedalvaro | 1:a4050fee11f7 | 30 | elasticLoop* pBlob= new elasticLoop(); |
mbedalvaro | 12:0de9cd2bced5 | 31 | pBlob->createBlob(blobArray.size(), RELAX, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0)); |
mbedalvaro | 1:a4050fee11f7 | 32 | // add this relaxing loop to the present config: |
mbedalvaro | 1:a4050fee11f7 | 33 | blobArray.push_back(pBlob); |
mbedalvaro | 1:a4050fee11f7 | 34 | |
mbedalvaro | 1:a4050fee11f7 | 35 | // update auxiliary variable numBlobs (just for easy reference): |
mbedalvaro | 1:a4050fee11f7 | 36 | numBlobs=blobArray.size(); |
mbedalvaro | 1:a4050fee11f7 | 37 | |
mbedalvaro | 0:345b3bc7a0ea | 38 | } |
mbedalvaro | 0:345b3bc7a0ea | 39 | |
mbedalvaro | 0:345b3bc7a0ea | 40 | |
mbedalvaro | 1:a4050fee11f7 | 41 | void blobConfig::addOneElasticLoopContract() { |
mbedalvaro | 1:a4050fee11f7 | 42 | elasticLoop* pBlob= new elasticLoop(); |
mbedalvaro | 12:0de9cd2bced5 | 43 | pBlob->createBlob(blobArray.size(), CONTRACT, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0)); |
mbedalvaro | 1:a4050fee11f7 | 44 | // add this relaxing loop to the present config: |
mbedalvaro | 1:a4050fee11f7 | 45 | blobArray.push_back(pBlob); |
mbedalvaro | 1:a4050fee11f7 | 46 | |
mbedalvaro | 1:a4050fee11f7 | 47 | // update auxiliary variable numBlobs (just for easy reference): |
mbedalvaro | 1:a4050fee11f7 | 48 | numBlobs=blobArray.size(); |
mbedalvaro | 0:345b3bc7a0ea | 49 | } |
mbedalvaro | 0:345b3bc7a0ea | 50 | |
mbedalvaro | 1:a4050fee11f7 | 51 | void blobConfig::addOneElasticLoopContractCentral() { |
mbedalvaro | 1:a4050fee11f7 | 52 | elasticLoop* pBlob= new elasticLoop(); |
mbedalvaro | 12:0de9cd2bced5 | 53 | pBlob->createBlob(blobArray.size(), CONTRACT_CENTRAL, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0)); |
mbedalvaro | 1:a4050fee11f7 | 54 | // add this relaxing loop to the present config: |
mbedalvaro | 1:a4050fee11f7 | 55 | blobArray.push_back(pBlob); |
mbedalvaro | 1:a4050fee11f7 | 56 | |
mbedalvaro | 1:a4050fee11f7 | 57 | // update auxiliary variable numBlobs (just for easy reference): |
mbedalvaro | 1:a4050fee11f7 | 58 | numBlobs=blobArray.size(); |
mbedalvaro | 0:345b3bc7a0ea | 59 | } |
mbedalvaro | 0:345b3bc7a0ea | 60 | |
mbedalvaro | 1:a4050fee11f7 | 61 | void blobConfig::addOneElasticContourFollowing() { |
mbedalvaro | 1:a4050fee11f7 | 62 | |
mbedalvaro | 1:a4050fee11f7 | 63 | elasticLoop* pBlob= new elasticLoop(); |
mbedalvaro | 12:0de9cd2bced5 | 64 | pBlob->createBlob(blobArray.size(), CONTOUR_FOLLOWING, vector2Df(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()), vector2Df(0,0)); |
mbedalvaro | 1:a4050fee11f7 | 65 | // add this relaxing loop to the present config: |
mbedalvaro | 1:a4050fee11f7 | 66 | blobArray.push_back(pBlob); |
mbedalvaro | 1:a4050fee11f7 | 67 | |
mbedalvaro | 1:a4050fee11f7 | 68 | // update auxiliary variable numBlobs (just for easy reference): |
mbedalvaro | 1:a4050fee11f7 | 69 | numBlobs=blobArray.size(); |
mbedalvaro | 0:345b3bc7a0ea | 70 | } |
mbedalvaro | 0:345b3bc7a0ea | 71 | |
mbedalvaro | 0:345b3bc7a0ea | 72 | |
mbedalvaro | 1:a4050fee11f7 | 73 | void blobConfig:: addOneElasticContourFollowingFAST() { |
mbedalvaro | 1:a4050fee11f7 | 74 | elasticLoop* pBlob= new elasticLoop(); |
mbedalvaro | 12:0de9cd2bced5 | 75 | pBlob->createBlob(blobArray.size(), CONTOUR_FOLLOWING_FAST, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0)); |
mbedalvaro | 0:345b3bc7a0ea | 76 | // add this relaxing loop to the present config: |
mbedalvaro | 1:a4050fee11f7 | 77 | blobArray.push_back(pBlob); |
mbedalvaro | 1:a4050fee11f7 | 78 | |
mbedalvaro | 1:a4050fee11f7 | 79 | // update auxiliary variable numBlobs (just for easy reference): |
mbedalvaro | 1:a4050fee11f7 | 80 | numBlobs=blobArray.size(); |
mbedalvaro | 1:a4050fee11f7 | 81 | } |
mbedalvaro | 1:a4050fee11f7 | 82 | |
mbedalvaro | 1:a4050fee11f7 | 83 | void blobConfig::addOneElasticBouncing() { |
mbedalvaro | 1:a4050fee11f7 | 84 | elasticLoop* pBlob= new elasticLoop(); |
mbedalvaro | 12:0de9cd2bced5 | 85 | pBlob->createBlob(blobArray.size(), BOUNCING, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(1,1)); |
mbedalvaro | 1:a4050fee11f7 | 86 | // add this relaxing loop to the present config: |
mbedalvaro | 1:a4050fee11f7 | 87 | blobArray.push_back(pBlob); |
mbedalvaro | 1:a4050fee11f7 | 88 | |
mbedalvaro | 1:a4050fee11f7 | 89 | // update auxiliary variable numBlobs (just for easy reference): |
mbedalvaro | 1:a4050fee11f7 | 90 | numBlobs=blobArray.size(); |
mbedalvaro | 0:345b3bc7a0ea | 91 | } |
mbedalvaro | 0:345b3bc7a0ea | 92 | |
mbedalvaro | 1:a4050fee11f7 | 93 | void blobConfig::addOneRigidLoopBouncing() { |
mbedalvaro | 1:a4050fee11f7 | 94 | rigidLoop* pBlob= new rigidLoop(); |
mbedalvaro | 12:0de9cd2bced5 | 95 | pBlob->createBlob(blobArray.size(), SPOT_BOUNCING, vector2Df(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()), vector2Df(0,0)); |
mbedalvaro | 0:345b3bc7a0ea | 96 | // add this relaxing loop to the present config: |
mbedalvaro | 1:a4050fee11f7 | 97 | blobArray.push_back(pBlob); |
mbedalvaro | 1:a4050fee11f7 | 98 | |
mbedalvaro | 1:a4050fee11f7 | 99 | // update auxiliary variable numBlobs (just for easy reference): |
mbedalvaro | 1:a4050fee11f7 | 100 | numBlobs=blobArray.size(); |
mbedalvaro | 0:345b3bc7a0ea | 101 | } |
mbedalvaro | 0:345b3bc7a0ea | 102 | |
mbedalvaro | 1:a4050fee11f7 | 103 | void blobConfig::addOneRigidLoopFollowing() { |
mbedalvaro | 1:a4050fee11f7 | 104 | rigidLoop* pBlob= new rigidLoop(); |
mbedalvaro | 14:0fc33a3a7b4b | 105 | pBlob->createBlob(blobArray.size(), SPOT_FOLLOWING, vector2Df(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()), vector2Df(0,0)); |
mbedalvaro | 1:a4050fee11f7 | 106 | // add this relaxing loop to the present config: |
mbedalvaro | 1:a4050fee11f7 | 107 | blobArray.push_back(pBlob); |
mbedalvaro | 1:a4050fee11f7 | 108 | |
mbedalvaro | 1:a4050fee11f7 | 109 | // update auxiliary variable numBlobs (just for easy reference): |
mbedalvaro | 1:a4050fee11f7 | 110 | numBlobs=blobArray.size(); |
mbedalvaro | 1:a4050fee11f7 | 111 | } |
mbedalvaro | 0:345b3bc7a0ea | 112 | |
mbedalvaro | 5:73cd58b58f95 | 113 | void blobConfig::addOneRigidLoopTest() { |
mbedalvaro | 5:73cd58b58f95 | 114 | rigidLoop* pBlob= new rigidLoop(); |
mbedalvaro | 12:0de9cd2bced5 | 115 | pBlob->createBlob(blobArray.size(), SPOT_TEST, vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0)); |
mbedalvaro | 5:73cd58b58f95 | 116 | // add this relaxing loop to the present config: |
mbedalvaro | 5:73cd58b58f95 | 117 | blobArray.push_back(pBlob); |
mbedalvaro | 5:73cd58b58f95 | 118 | |
mbedalvaro | 5:73cd58b58f95 | 119 | // update auxiliary variable numBlobs (just for easy reference): |
mbedalvaro | 5:73cd58b58f95 | 120 | numBlobs=blobArray.size(); |
mbedalvaro | 5:73cd58b58f95 | 121 | } |
mbedalvaro | 5:73cd58b58f95 | 122 | |
mbedalvaro | 0:345b3bc7a0ea | 123 | |
mbedalvaro | 0:345b3bc7a0ea | 124 | // ================================================================================================================================================== |
mbedalvaro | 0:345b3bc7a0ea | 125 | |
mbedalvaro | 0:345b3bc7a0ea | 126 | |
mbedalvaro | 1:a4050fee11f7 | 127 | void blobConfig::allKill() { // this put all the blobs in "dead" mode, meaning that neither rendering nor update is done (but they are not deleted). |
mbedalvaro | 1:a4050fee11f7 | 128 | for (int i=0; i<blobArray.size(); i++) { |
mbedalvaro | 1:a4050fee11f7 | 129 | blobArray[i]->render = false; |
mbedalvaro | 1:a4050fee11f7 | 130 | blobArray[i]->standByMode = false; |
mbedalvaro | 1:a4050fee11f7 | 131 | } |
mbedalvaro | 1:a4050fee11f7 | 132 | } |
mbedalvaro | 0:345b3bc7a0ea | 133 | void blobConfig::allAlive() { |
mbedalvaro | 1:a4050fee11f7 | 134 | for (int i=0; i<blobArray.size(); i++) { |
mbedalvaro | 1:a4050fee11f7 | 135 | blobArray[i]->render = true; |
mbedalvaro | 1:a4050fee11f7 | 136 | blobArray[i]->standByMode = true; |
mbedalvaro | 1:a4050fee11f7 | 137 | } |
mbedalvaro | 1:a4050fee11f7 | 138 | } |
mbedalvaro | 1:a4050fee11f7 | 139 | |
mbedalvaro | 0:345b3bc7a0ea | 140 | void blobConfig::allStandBy() { |
mbedalvaro | 1:a4050fee11f7 | 141 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = true; |
mbedalvaro | 0:345b3bc7a0ea | 142 | } |
mbedalvaro | 0:345b3bc7a0ea | 143 | |
mbedalvaro | 0:345b3bc7a0ea | 144 | void blobConfig::allResume() { |
mbedalvaro | 1:a4050fee11f7 | 145 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = false; |
mbedalvaro | 0:345b3bc7a0ea | 146 | } |
mbedalvaro | 0:345b3bc7a0ea | 147 | |
mbedalvaro | 1:a4050fee11f7 | 148 | void blobConfig::allVisible() { |
mbedalvaro | 1:a4050fee11f7 | 149 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->render = true; |
mbedalvaro | 0:345b3bc7a0ea | 150 | } |
mbedalvaro | 0:345b3bc7a0ea | 151 | |
mbedalvaro | 0:345b3bc7a0ea | 152 | void blobConfig::allInvisible() { // note that they may continue to evolve |
mbedalvaro | 1:a4050fee11f7 | 153 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->render = false; |
mbedalvaro | 0:345b3bc7a0ea | 154 | } |
mbedalvaro | 0:345b3bc7a0ea | 155 | |
mbedalvaro | 1:a4050fee11f7 | 156 | void blobConfig::update() { // update dynamics of the blob |
mbedalvaro | 1:a4050fee11f7 | 157 | for (int i=0; i<blobArray.size(); i++) { |
mbedalvaro | 3:b44ff6de81bd | 158 | if (blobArray[i]->standByMode==false) blobArray[i]->update(); |
mbedalvaro | 1:a4050fee11f7 | 159 | } |
mbedalvaro | 0:345b3bc7a0ea | 160 | } |
mbedalvaro | 0:345b3bc7a0ea | 161 | |
mbedalvaro | 1:a4050fee11f7 | 162 | void blobConfig::draw() { // draw uses the opengl like renderer (if any), and save projected trajectory in the LaserSensingTrajectory object of each blob |
mbedalvaro | 1:a4050fee11f7 | 163 | for (int i=0; i<blobArray.size(); i++) { |
mbedalvaro | 1:a4050fee11f7 | 164 | if (blobArray[i]->render==true) blobArray[i]->draw(); |
mbedalvaro | 1:a4050fee11f7 | 165 | } |
mbedalvaro | 0:345b3bc7a0ea | 166 | } |
mbedalvaro | 0:345b3bc7a0ea | 167 | |
mbedalvaro | 1:a4050fee11f7 | 168 | void blobConfig::sendConfData() { |
mbedalvaro | 1:a4050fee11f7 | 169 | // For the time being, only "per blob" data sending: |
mbedalvaro | 1:a4050fee11f7 | 170 | // (b) Per-spot sending of data (note: both are NOT exclusive; so if we want just packaged data, we need to make all the spot STOP sending data. |
mbedalvaro | 18:d72935b13858 | 171 | for (int i=0; i<blobArray.size(); i++) { |
mbedalvaro | 1:a4050fee11f7 | 172 | if (blobArray[i]->render==true) blobArray[i]->sendData(); // a blob that is in stand-by mode may send data (good for testing with a fixed loop) |
mbedalvaro | 1:a4050fee11f7 | 173 | } |
mbedalvaro | 0:345b3bc7a0ea | 174 | } |
mbedalvaro | 0:345b3bc7a0ea | 175 | |
mbedalvaro | 0:345b3bc7a0ea | 176 | |
mbedalvaro | 0:345b3bc7a0ea | 177 | |
mbedalvaro | 0:345b3bc7a0ea | 178 |