.\vCurveCalculation.cpp Tue Dec 31 07:51:54 2019 1 :#include2 :#include 3 :#include // ADD: 20191230 4 : 5 :#include "array_counter.h" // ADD: 20191230 6 :#include "sender.h" // ADD: 20191230 7 :#include "Print.h" // ADD: 20191230 8 : 9 :#include "vPoint.h" 10 :#include "vLine.h" 11 :#include "vCalculation.h" 12 :#include "vCurveCalculation.h" 13 : 14 :// 15 :// 16 :// 17 :// 18 :// 19 :vPoint* vCurveCalculation::BattleField (vPoint* p1, vPoint* p2, vPoint* p3, vPoint* p4, float t) { 20 : vCalculation* calc = nullptr; 21 : 22 : printf("vCurveCalculation::BattleField: |%p|%p|%p|%p|", p1, p2, p3, p4 ); 23 : // calculation, revisement 24 : float tt = t*t; 25 : float c=2.0f; 26 : 27 : // Linear 28 : vPoint* p5 = calc->scalize( p1, (1.0f - t) ); // anchor p1 29 : vPoint* p6 = calc->scalize ( p4, t ); // anchor p4 30 : 31 : vPoint* point = calc->add ( p5, p6 ); 32 : 33 : //consider, p2 and p3 which are controls points. 34 : // Curve 35 : // if t=0: 36 : // curve_point=p1: 37 : // p2=0: 38 : // p3=0: 39 : // if t=1: 40 : // curve_point=p4: 41 : // p2=0: 42 : // p3=0: 43 : float graph = -( 1.0 /(0.5*0.5))*( t - 0.5 )*( t - 0.5 ) + 1.0; 44 : vPoint* p7 = calc->subtract ( p2, p1 ); 45 : vPoint* p8 = calc->subtract ( p3, p4 ); 46 : vPoint* p9 = calc->scalize ( p7, graph ); 47 : vPoint* p10 = calc->scalize ( p8, graph ); 48 : vPoint* curve_point_001 = calc->add ( p9, p10 ); 49 : vPoint* curve_point = calc->scalize( curve_point_001, 0.5f ); 50 : 51 : vPoint* temp = calc->add( point, p9 ); 52 : 53 : // Linear + Curve: Blend 54 : // Debug 55 : //vPoint* blend_001 = calc->add( curve_point, point ); 56 : vPoint* blend_001 = calc->add( curve_point, point ); 57 : vPoint* blend = calc->scalize( blend_001, 0.5f); 58 : 59 : level_error_msg = 2; 60 : // Calculated points printed. 61 : log_msg_003("p7="); 62 : p7->print(); 63 : log_msg_003("p8="); 64 : p8->print(); 65 : 66 : log_msg_003("curve_point="); 67 : curve_point->print(); 68 : log_msg_003("blend="); 69 : blend->print(); 70 : log_msg_003("blend_001="); 71 : blend_001->print(); 72 : log_msg_003("point="); 73 : point->print(); 74 : log_msg_003("t=%f graph=%f", t, graph); 75 : level_error_msg = 3; 76 : 77 : 78 : printf("vCurveCalculation::BattleField: |%p|\r\n", blend ); 79 : 80 : //if ( t>0.8 ) exit(-1); //20191230 81 : 82 :// return point; 83 :// return curve_point; 84 : return temp; 85 :} 86 : 87 :// p1: Anchor 88 :// p2: setting controls 89 :// 90 :// p3: Anchor(next) 91 :// p4: setting controls 92 :// 93 :// vCurveCalculation 94 :// Position 95 :/* vPoint* vCurveCalculation::Position (vPoint* p1, vPoint* p2, vPoint p3, vPoint* p4, float t) { 96 : vCalculation* calc = nullptr; 97 : 98 : // calculation, revisement 99 : float tt = t*t; 100 : 101 : vPoint* p5 = calc->multiple ( p1, 1 - tt ); 102 : vPoint* p6 = calc->multiple ( p3, tt ); 103 : 104 : vPoint point calc->add ( p5, p6 ); 105 : 106 : //consider, p2 and p3 which is controls point. 107 : 108 : return point; 109 :}*/ 110 :