Revision 24d22f93
Added by Leszek Koltunski over 7 years ago
src/main/java/org/distorted/library/type/Dynamic.java | ||
---|---|---|
77 | 77 |
* Set the mode to ACCESS_SEQUENTIAL if you need to change mDuration and you would rather have the Dynamic |
78 | 78 |
* keep on smoothly interpolating. |
79 | 79 |
* On the other hand, in this mode, a Dynamic can only be accessed in sequential manner, which means one |
80 |
* one Dynamic can only be used in one effect at a time.
|
|
80 |
* Dynamic can only be used in one effect at a time. |
|
81 | 81 |
*/ |
82 | 82 |
public static final int ACCESS_SEQUENTIAL = 1; |
83 | 83 |
|
... | ... | |
155 | 155 |
private static final int NUM_NOISE = 5; // used iff mNoise>0.0. Number of intermediary points between each pair of adjacent vectors |
156 | 156 |
// where we randomize noise factors to make the way between the two vectors not so smooth. |
157 | 157 |
|
158 |
//private int lastNon; |
|
159 |
|
|
160 | 158 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
161 | 159 |
// hide this from Javadoc |
162 | 160 |
|
... | ... | |
248 | 246 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
249 | 247 |
// debugging only |
250 | 248 |
|
249 |
@SuppressWarnings("unused") |
|
251 | 250 |
private void checkBase() |
252 | 251 |
{ |
253 | 252 |
float tmp, cosA; |
... | ... | |
387 | 386 |
computeOrthonormalBase(); |
388 | 387 |
} |
389 | 388 |
|
390 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
391 |
// debugging |
|
392 |
/* |
|
393 |
protected void computeOrthonormalBaseMoreDebug(float time,VectorCache vc) |
|
394 |
{ |
|
395 |
for(int i=0; i<mDimension; i++) |
|
396 |
{ |
|
397 |
baseV[0][i] = (3*vc.a[i]*time+2*vc.b[i])*time+vc.c[i]; // first derivative, i.e. velocity vector |
|
398 |
baseV[1][i] = 6*vc.a[i]*time+2*vc.b[i]; // second derivative,i.e. acceleration vector |
|
399 |
} |
|
400 |
|
|
401 |
float av=0.0f, vv=0.0f; |
|
402 |
|
|
403 |
android.util.Log.e("dyn3D", " ==> velocity ("+baseV[0][0]+","+baseV[0][1]+","+baseV[0][2]+")"); |
|
404 |
android.util.Log.e("dyn3D", " ==> acceleration ("+baseV[1][0]+","+baseV[1][1]+","+baseV[1][2]+")"); |
|
405 |
|
|
406 |
for(int k=0; k<mDimension; k++) |
|
407 |
{ |
|
408 |
vv += baseV[0][k]*baseV[0][k]; |
|
409 |
av += baseV[1][k]*baseV[0][k]; |
|
410 |
} |
|
411 |
|
|
412 |
android.util.Log.e("dyn3D", " ==> av: "+av+" vv="+vv); |
|
413 |
|
|
414 |
av /= vv; |
|
415 |
|
|
416 |
for(int k=0;k<mDimension; k++) |
|
417 |
{ |
|
418 |
baseV[1][k] -= av*baseV[0][k]; |
|
419 |
} |
|
420 |
|
|
421 |
android.util.Log.e("dyn3D", " ==> second base ("+baseV[1][0]+","+baseV[1][1]+","+baseV[1][2]+")"); |
|
422 |
} |
|
423 |
*/ |
|
424 | 389 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
425 | 390 |
// helper function in case we are interpolating through more than 2 points |
426 | 391 |
|
... | ... | |
467 | 432 |
for(int i=0; i<mDimension; i++) |
468 | 433 |
if( baseV[0][i] != 0.0f ) |
469 | 434 |
last_non_zero=i; |
470 |
/* |
|
471 |
if( last_non_zero != lastNon ) |
|
472 |
android.util.Log.e("dynamic", "lastNon="+lastNon+" last_non_zero="+last_non_zero); |
|
473 |
*/ |
|
474 | 435 |
|
475 | 436 |
if( last_non_zero==-1 ) /// |
476 | 437 |
{ // velocity is the 0 vector -> two |
... | ... | |
521 | 482 |
} /// End Normalize |
522 | 483 |
} |
523 | 484 |
|
524 |
//lastNon = last_non_zero; |
|
525 |
|
|
526 | 485 |
//printBase("end"); |
527 | 486 |
//checkBase(); |
528 | 487 |
} |
529 | 488 |
|
530 | 489 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
531 | 490 |
// internal debugging only! |
532 |
|
|
491 |
|
|
533 | 492 |
public String print() |
534 | 493 |
{ |
535 |
return "duration="+mDuration+" count="+mCount+" Noise="+mNoise+" numVectors="+numPoints+" mMode="+mMode;
|
|
494 |
return "duration="+mDuration+" count="+mCount+" Noise[0]="+mNoise[0]+" numVectors="+numPoints+" mMode="+mMode;
|
|
536 | 495 |
} |
537 | 496 |
|
538 | 497 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
... | ... | |
554 | 513 |
* |
555 | 514 |
* @param mode {@link Dynamic#MODE_LOOP}, {@link Dynamic#MODE_PATH} or {@link Dynamic#MODE_JUMP}. |
556 | 515 |
*/ |
557 |
|
|
558 | 516 |
public void setMode(int mode) |
559 | 517 |
{ |
560 | 518 |
mMode = mode; |
... | ... | |
594 | 552 |
* @param duration Time, in milliseconds, it takes to do one full interpolation, i.e. go from the first |
595 | 553 |
* Point to the last and back. |
596 | 554 |
*/ |
597 |
|
|
598 | 555 |
public void setDuration(long duration) |
599 | 556 |
{ |
600 | 557 |
mDuration = duration; |
... | ... | |
605 | 562 |
/** |
606 | 563 |
* Sets the access mode this Dynamic will be working in. |
607 | 564 |
* |
608 |
* @param mode ACCESS_RANDOM or ACCESS_SEQUENTIAL. |
|
609 |
* see {@link Dynamic#ACCESS_RANDOM}. |
|
610 |
* see {@link Dynamic#ACCESS_SEQUENTIAL}. |
|
565 |
* @param mode {@link Dynamic#ACCESS_RANDOM} or {@link Dynamic#ACCESS_SEQUENTIAL}. |
|
611 | 566 |
*/ |
612 | 567 |
public void setAccessMode(int mode) |
613 | 568 |
{ |
... | ... | |
619 | 574 |
/** |
620 | 575 |
* Writes the results of interpolation between the Points at time 'time' to the passed float buffer. |
621 | 576 |
* |
622 |
* @param buffer Float buffer we will write the resulting Static1D to.
|
|
577 |
* @param buffer Float buffer we will write the results to.
|
|
623 | 578 |
* @param offset Offset in the buffer where to write the result. |
624 | 579 |
* @param time Time of interpolation. Time=0.0 would return the first Point, Time=0.5 - the last, |
625 | 580 |
* time=1.0 - the first again, and time 0.1 would be 1/5 of the way between the first and the last Points. |
626 | 581 |
*/ |
627 |
|
|
628 | 582 |
public void interpolateMain(float[] buffer, int offset, long time) |
629 | 583 |
{ |
630 | 584 |
if( mDuration<=0.0f ) |
... | ... | |
649 | 603 |
* This version differs from the previous in that it returns a boolean value which indicates whether |
650 | 604 |
* the interpolation is finished. |
651 | 605 |
* |
652 |
* @param buffer Float buffer we will write the resulting Static1D to.
|
|
606 |
* @param buffer Float buffer we will write the results to.
|
|
653 | 607 |
* @param offset Offset in the buffer where to write the result. |
654 | 608 |
* @param time Time of interpolation. Time=0.0 would return the first Point, Time=0.5 - the last, |
655 | 609 |
* time=1.0 - the first again, and time 0.1 would be 1/5 of the way between the first and the last Points. |
Also available in: Unified diff
Progress with WindManager.