// //Euclidiana... não parece interessante // private float GetEuclidianDistance(Player p1, Player p2){ // //Distância nas 5 dimensões // float distance1, distance2, d1, d2, d3, d4, d5; // d1 = p1.economicEqualityMarkets - p2.economicEqualityMarkets; // d2 = p1.diplomaticNationGlobe - p2.diplomaticNationGlobe; // d3 = p1.civilAuthorityLiberty - p2.civilAuthorityLiberty; // d4 = p1.societalTraditionProgress - p2.societalTraditionProgress; // d5 = Mathf.Abs(p1.exposition - p2.exposition); // //d5 = 1.0f * p2.exposition / (p1.exposition+1); //teste // distance1 = Mathf.Sqrt (d1 * d1 + d2 * d2 + d3 * d3 + d4 * d4); // distance2 = Mathf.Sqrt (d1 * d1 + d2 * d2 + d3 * d3 + d4 * d4 + d5 * d5); // return (distance1 + distance2 + 0.001f);// + distance*d5*d5; // } private float GetAttractionFactor(Candidate p1, ElectoralGroup_Data elec) { float af = (float)(p1.resources.visibility + 100) / GetDistance(p1, elec); //Debug.Log ("Attraction Factor " + af); return(af * af); }
private float GetDistance(Candidate p1, ElectoralGroup_Data p2) { float distance1, distance2, d1, d2, d3, d4; d1 = Mathf.Abs(p1.alignment.economic.value - p2.alignment.economic.value); d2 = Mathf.Abs(p1.alignment.civil.value - p2.alignment.civil.value); d3 = Mathf.Abs(p1.alignment.societal.value - p2.alignment.societal.value); d4 = Mathf.Abs(p1.resources.visibility - p2.resources.visibility); distance1 = d1 + d2 + d3; distance2 = distance1 + d4 * d4 / (p1.resources.visibility * p1.resources.visibility + 200); // + Mathf.Sqrt(p2.exposition/(p1.exposition+100)); return(distance2 + 0.001f); }