MCPcopy Create free account
hub / github.com/catabriga/graphwar / processRK4Range

Method processRK4Range

src/Graphwar/Function.java:345–480  ·  view source on GitHub ↗
(Obstacle obstacle, Player players[], int numPlayers, int currentTurn, boolean inverted)

Source from the content-addressed store, hash-verified

343 }
344
345 public void processRK4Range(Obstacle obstacle, Player players[], int numPlayers, int currentTurn, boolean inverted)
346 {
347 playersHit = new int[numPlayers*Constants.MAX_SOLDIERS_PER_PLAYER];
348 soldiersHit = new int[numPlayers*Constants.MAX_SOLDIERS_PER_PLAYER];
349 soldierHitPosition = new int[numPlayers*Constants.MAX_SOLDIERS_PER_PLAYER];
350 numPlayersHit = 0;
351
352 valuesX = new double[Constants.FUNC_MAX_STEPS];
353 valuesY = new double[Constants.FUNC_MAX_STEPS];
354
355 double stepSize = Constants.STEP_SIZE;
356
357 Soldier currentTurnSoldier = players[currentTurn].getCurrentTurnSoldier();
358
359 valuesX[0] = currentTurnSoldier.getX();
360 valuesY[0] = currentTurnSoldier.getY();
361
362 if(inverted)
363 {
364 valuesX[0] = Constants.PLANE_LENGTH - valuesX[0];
365 }
366
367 valuesX[0] = (Constants.PLANE_GAME_LENGTH*(valuesX[0] - Constants.PLANE_LENGTH/2))/Constants.PLANE_LENGTH;
368 valuesY[0] = (Constants.PLANE_GAME_LENGTH*(-valuesY[0] + Constants.PLANE_HEIGHT/2))/Constants.PLANE_LENGTH;
369
370 double gameCoordinateRadius = ((double)(Constants.PLANE_GAME_LENGTH*Constants.SOLDIER_RADIUS))/Constants.PLANE_LENGTH;
371
372 fireAngle = getRK4StartAngle(valuesX[0], valuesY[0], gameCoordinateRadius);
373
374 valuesX[0] = valuesX[0] + gameCoordinateRadius*Math.cos(fireAngle);
375 valuesY[0] = valuesY[0] + gameCoordinateRadius*Math.sin(fireAngle);
376
377
378 numSteps = Constants.FUNC_MAX_STEPS;
379 for(int i=1; i<Constants.FUNC_MAX_STEPS; i++)
380 {
381 double tempStepSize = stepSize;
382
383 double k1 = polishFunc.evaluateFunction( valuesX[i-1], valuesY[i-1], 0);
384 double k2 = polishFunc.evaluateFunction( valuesX[i-1] + 0.5*tempStepSize, valuesY[i-1] + 0.5*tempStepSize*k1, 0);
385 double k3 = polishFunc.evaluateFunction( valuesX[i-1] + 0.5*tempStepSize, valuesY[i-1] + 0.5*tempStepSize*k2, 0);
386 double k4 = polishFunc.evaluateFunction( valuesX[i-1] + tempStepSize, valuesY[i-1] + tempStepSize*k3, 0);
387
388 valuesY[i] = valuesY[i-1] + (tempStepSize/6)*(k1 + 2*k2 + 2*k3 + k4);
389 valuesX[i] = valuesX[i-1] + tempStepSize;
390
391 boolean endFunc = false;
392
393 for(int j=0; Math.pow(valuesX[i]-valuesX[i-1], 2)+Math.pow(valuesY[i]-valuesY[i-1], 2) > Constants.FUNC_MAX_STEP_DISTANCE_SQUARED && valuesX[i]-valuesX[i-1]>Constants.FUNC_MIN_X_STEP_DISTANCE;j++)
394 {
395 if(valuesX[i]-valuesX[i-1]>Constants.FUNC_MIN_X_STEP_DISTANCE)
396 {
397 tempStepSize = tempStepSize/2;
398
399 k1 = polishFunc.evaluateFunction( valuesX[i-1], valuesY[i-1], 0);
400 k2 = polishFunc.evaluateFunction( valuesX[i-1] + 0.5*tempStepSize, valuesY[i-1] + 0.5*tempStepSize*k1, 0);
401 k3 = polishFunc.evaluateFunction( valuesX[i-1] + 0.5*tempStepSize, valuesY[i-1] + 0.5*tempStepSize*k2, 0);
402 k4 = polishFunc.evaluateFunction( valuesX[i-1] + tempStepSize, valuesY[i-1] + tempStepSize*k3, 0);

Callers 2

evaluateFunctionMethod · 0.95
processFunctionMethod · 0.80

Calls 13

getXMethod · 0.95
getYMethod · 0.95
getRK4StartAngleMethod · 0.95
playerAlreadyHitMethod · 0.95
getCurrentTurnSoldierMethod · 0.80
isAliveMethod · 0.80
getSoldiersMethod · 0.80
collidePointMethod · 0.80
evaluateFunctionMethod · 0.45
getNumSoldiersMethod · 0.45
getXMethod · 0.45

Tested by

no test coverage detected