private void DrawMainObjectPath(ProjectedPositionCalculator ppCalc) { var position = _objects.MainObject.Location; var speed = _objects.MainObject.Speed; var mass = _objects.MainObject.Mass; for (var i = 0; i < 300; i++) { var forces = new Force(Angle.Zero, 0); foreach (var planet in _objects.Terrains) { var distance = PointCalculator.Distance(position, planet.Location); var angle = PointCalculator.CalculateAngle(position, planet.Location); forces += GravityCalculator.CalculateGravity(mass, planet.Mass, distance, angle); } var acceleration = forces.GetAcceleration(mass); speed += acceleration.GetSpeed(new TimeSpan(0, 0, 0, 10)); if (speed.Value > 50000) { break; } var flownDistance = speed.GetDistance(new TimeSpan(0, 0, 0, 10)).CalculateXAndY(); position.X += (float)flownDistance.X; position.Y += (float)flownDistance.Y; var projectedPosition = ppCalc.ProjectPoint(position); _graphicsBuffer.Graphics.FillRectangle(new SolidBrush(Color.White), projectedPosition.X, projectedPosition.Y, 1, 1); } }
public void Tick(object s, EventArgs e) { foreach (var movingObject in _objects.Rockets) { movingObject.DragForces = new List <Force>(); movingObject.GravityForces = new List <Force>(); foreach (var gravityObject in _objects.Terrains) { var distance = PointCalculator.Distance(movingObject.Location, gravityObject.Location); var angle = PointCalculator.CalculateAngle(movingObject.Location, gravityObject.Location); var force = GravityCalculator.CalculateGravity(movingObject.Mass, gravityObject.Mass, distance, angle); movingObject.GravityForces.Add(force); var altitude = distance - gravityObject.Diameter; if (altitude < 100000) { // Drag Relevant var rocketForceAngle = movingObject._angle; var dragAngle = Angle.FromDegrees(movingObject.Speed.Angle.Degree + 180); var speedDirectionDiff = Angle.FromDegrees(rocketForceAngle.Degree - movingObject.Speed.Angle.Degree); var cd = movingObject.Drag.GetDragCoefficient(speedDirectionDiff); var a = movingObject.Drag.GetArea(speedDirectionDiff); var p = AtmosphereCalculator.CalculateAirDensityAtAltitude(altitude); var dragForce = DragCalculator.CalculateDrag(dragAngle, cd, p, movingObject.Speed, a); movingObject.DragForces.Add(dragForce); } } movingObject.Tick(); } }
private void LateUpdate() { // if player is pressing spacebar, activate jetpack if (Input.GetKey(KeyCode.Space)) { GetComponent <Rigidbody>().AddForce((transform.up.normalized) * jetpackPower, ForceMode.Acceleration); } // if player is not on a planet, calculate gravity from planets if (currentPlanet == null) { // todo: cache planets instead of calling very bad FindObjectsOfType every frame BaseGravitationalObject[] gravityObjects = FindObjectsOfType <BaseGravitationalObject>(); foreach (BaseGravitationalObject item in gravityObjects) { if (item == this) { continue; } Vector3 direction = item.transform.position - transform.position; float speed = GravityCalculator.ConvertNewtonsToVelocity(Mass, GravityCalculator.CalculateGravitationalForceBetweenObjects(Mass, item.Mass, Vector3.Distance(transform.position, item.transform.position))); GetComponent <Rigidbody>().AddForce(direction.normalized * (speed / GravityCalculator.PlanetScale), ForceMode.Acceleration); } } }
public void CalculateFallingObject_Argument10_returnsThisString() { //arrange const string expected = "The object's position after 10 seconds is -490.5 m."; //act var actual = GravityCalculator.CalculateFallingObject(10); //assert Assert.Equal(expected, actual); }
public void CalculateFahrenheit(decimal specificGravity, decimal fahrenheitTemperature, decimal expected, decimal fahrenheitCalibrationTemperature = 68.0m) { // Arrange var gravityCalculator = new GravityCalculator(); // Act var result = gravityCalculator.CalculateFahrenheit(specificGravity, fahrenheitTemperature, fahrenheitCalibrationTemperature); // Assert result.Should().BeApproximately(expected, 0.00099m); }
public void Calculate(decimal specificGravity, decimal temperature, decimal expected, decimal calibrationTemperature = 20.0m) { // Arrange var gravityCalculator = new GravityCalculator(); // Act var result = gravityCalculator.Calculate(specificGravity, temperature, calibrationTemperature); // Assert result.Should().BeApproximately(expected, 0.00099m); }
public Functional(ProblemInfo info) { receivers = info.Receivers; n = info.Receivers.Length; K = info.P.Length; xCellCount = info.X.Length - 1; zCellCount = info.Z.Length - 1; alpha = info.Alpha; gamma = info.Gamma; g = new double[n]; realG = info.realG; calc = new GravityCalculator(info.X, info.Z, null); }
void FixedUpdate() { // Update gravity Physics.gravity = GravityCalculator.GetGravity(transform.position); getTouchInputs(); // Only allow acceleration and braking if the car is grounded if (levitate()) { // Do the keyboard input for movement if (Input.GetKey("w") || leftDown) { // Add a force if we're going forwards or backwards rb.AddRelativeForce(new Vector3(0, 0, Acceleration)); } if (Input.GetKey("s") || rightDown) { rb.AddRelativeForce(new Vector3(0, 0, -Acceleration)); } if (Input.GetKey(KeyCode.LeftShift) || (leftDown && rightDown)) { // Brakes limitVel(rb.velocity.magnitude - BrakeSpeed); } } if (Input.GetKey("d")) { // Add some torque to rotate rb.AddRelativeTorque(new Vector3(0, 1, 0) * TurnRate); } if (Input.GetKey("a")) { rb.AddRelativeTorque(new Vector3(0, -1, 0) * TurnRate); } // Do steering based off of phone rotation rb.AddRelativeTorque(new Vector3(0, -1, 0) * TurnRate * GyroscopeInput.angle / 45); limitVel(MaxSpeed); changeSound(); }