Waitrud Weber’s blog

things and reminders for memories

3d: windows-make: parabola, which is one of considers as changed

We can not choose function-name at that time.
And we modify this to the one of considers as function.

0 <= t <= 1

 

#include 
#include 
#include  // ADD: 20191230

#include "array_counter.h"	// ADD: 20191230
#include "sender.h"			// ADD: 20191230
#include "Print.h"			// ADD: 20191230

#include "vPoint.h"
#include "vLine.h"
#include "vCalculation.h"
#include "vCurveCalculation.h"

//
//
//
//
//
vPoint* vCurveCalculation::BattleField (vPoint* p1, vPoint* p2, vPoint* p3, vPoint* p4, float t) {
	vCalculation* calc = nullptr;

	printf("vCurveCalculation::BattleField: |%p|%p|%p|%p|", p1, p2, p3, p4 );
	// calculation, revisement
	float tt = t*t;
	float c=2.0f;

	// Linear
	vPoint* p5 = calc->scalize( p1, (1.0f - t) );	// anchor p1
	vPoint* p6 = calc->scalize ( p4, t ); 			// anchor p4

	vPoint* point = calc->add ( p5, p6 );

	//consider, p2 and p3 which are controls points.
	// Curve
	// if t=0:
	// curve_point=p1:
	// p2=0:
	// p3=0:
	// if t=1:
	// curve_point=p4:
	// p2=0:
	// p3=0:
	float graph = -( 1.0 /(0.5*0.5))*( t - 0.5 )*( t - 0.5 ) + 1.0;
	vPoint* p7 =  calc->subtract ( p2, p1 );
	vPoint* p8 =  calc->subtract ( p3, p4 );
	vPoint* p9 =  calc->scalize (  p7,  graph );
	vPoint* p10 = calc->scalize (  p8,  graph );
	vPoint* curve_point_001 = calc->add ( p9, p10 );
	vPoint* curve_point = calc->scalize( curve_point_001, 0.5f );

	vPoint* temp = calc->add( point, p9 );

	// Linear + Curve: Blend
	// Debug
	//vPoint* blend_001 = calc->add( curve_point, point );
	vPoint* blend_001 = calc->add( curve_point, point );
	vPoint* blend = calc->scalize( blend_001, 0.5f);

	level_error_msg = 2;
	// Calculated points printed.
	log_msg_003("p7=");
	p7->print();
	log_msg_003("p8=");
	p8->print();

	log_msg_003("curve_point=");
	curve_point->print();
	log_msg_003("blend=");
	blend->print();
	log_msg_003("blend_001=");
	blend_001->print();
	log_msg_003("point=");
	point->print();
	log_msg_003("t=%f graph=%f", t, graph);
	level_error_msg = 3;

	printf("vCurveCalculation::BattleField: |%p|\r\n", blend );

	//if ( t>0.8 ) 	exit(-1); //20191230

	// free
	// p5,p6, point, p7, p8, p9, p10, curve_point_001, curve_point, temp, blend_001, blend
	free(p5);
	free(p6);
	free(p7);
	free(p8);
	free(p9);
	free(p10);
	free(curve_point_001);
	free(curve_point);
	// free(temp);
	free(blend_001);
	// free(blend);

//	return point;
//	return curve_point;
	return temp;
}

// p1: Anchor
// p2: setting controls
//
// p3: Anchor(next)
// p4: setting controls
//
//      vCurveCalculation
//                         Position 
/* vPoint* vCurveCalculation::Position (vPoint* p1, vPoint* p2, vPoint p3, vPoint* p4, float t) {
	vCalculation* calc = nullptr;

	// calculation, revisement
	float tt = t*t;

	vPoint* p5 = calc->multiple ( p1, 1 - tt );
	vPoint* p6 = calc->multiple ( p3, tt );

	vPoint point calc->add ( p5, p6 );

	//consider, p2 and p3 which is controls point.

	return point;
}*/