I have all the constants set to the same values for each set of code, G, the timestep, the masses of the planets etc. But using Velocity Verlet doesn't work unless I lower the gravitational constant because otherwise the gravitational pull is too high. The code is the same for both simulations up until the actual Velocity Verlet integration. Is this normal? If it's not, I'll edit the code into the question as I am unable to do so right now. The simulation uses one massive planet and one less massive planet with a starting speed, which works for symplectic and forward Euler. Here is the code:
/*// Euler Integration
float deltaT = Extras.TIME_STEP * simSpeed;
float deltaT2 = deltaT * deltaT;
float deltaX = planet.getPos().x - this.pos.x;
float deltaY = planet.getPos().y - this.pos.y;
float alpha = (float) Math.toDegrees(Math.atan2(deltaY, deltaX));
float distance = (float) Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
float F = Extras.G * ((float) this.m * planet.getM()) / (distance * distance);
this.force.x = F * MathUtils.cosDeg(alpha);
this.force.y = F * MathUtils.sinDeg(alpha);
this.accel.x = (float) (this.force.x / this.m);
this.accel.y = (float) (this.force.y / this.m);
this.vel.x += this.accel.x * 0.5f * deltaT;
this.vel.y += this.accel.y * 0.5f * deltaT;
this.pos.x += this.vel.x * deltaT;
this.pos.y += this.vel.y * deltaT;*/
// Velocity Verlet Integration
float deltaT = Extras.TIME_STEP * simSpeed;
float deltaT2 = deltaT * deltaT;
float x = this.pos.x;
float y = this.pos.y;
x += this.vel.x * deltaT + 0.5f * this.accel.x * deltaT2;
y += this.vel.y * deltaT + 0.5f * this.accel.y * deltaT2;
float deltaX = planet.getPos().x - x;
float deltaY = planet.getPos().y - y;
float alpha = (float) Math.toDegrees(Math.atan2(deltaY, deltaX));
float distance = (float) Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
float F = Extras.G * (float) this.m * planet.getM() / (distance * distance);
this.force.x = F * MathUtils.cosDeg(alpha);
this.force.y = F * MathUtils.sinDeg(alpha);
this.vel.x += 0.5f * (this.accel.x + (this.force.x / this.m)) * deltaT;
this.vel.y += 0.5f * (this.accel.y + (this.force.y / this.m)) * deltaT;
this.pos.x = x;
this.pos.y = y;
this.accel.x = this.force.x / (float) this.m;
this.accel.y = this.force.y / (float) this.m;
This is what the orbit looks like in Verlet vs Euler:

Edit: I've found out why, but still not if this is normal: The velocity is updated similarily in both but the position is updated WITH the acceleration in Verlet and not in Euler, which is the correct implementation however.

v += 0.5*h*a; x += h*v; a = acc(x); v += 0.5*h*a, or use leapfrog Verlet as the main propagation and store the mid-values of the velocities for the "integer indices". – Lutz Lehmann Feb 26 '23 at 08:53