aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrynnchernosky <56202540+brynnchernosky@users.noreply.github.com>2023-02-18 15:00:46 -0500
committerbrynnchernosky <56202540+brynnchernosky@users.noreply.github.com>2023-02-18 15:00:46 -0500
commit1bffa19d7b2c085a2f647a0269acdc05630d5146 (patch)
tree45a6da4c112baf5dba130ba0c5549a246039abf1
parenta9b9c26764cae849af16078796578db53a180be4 (diff)
debugging
-rw-r--r--src/client/views/nodes/PhysicsSimulationBox.tsx67
-rw-r--r--src/client/views/nodes/PhysicsSimulationWeight.tsx87
2 files changed, 78 insertions, 76 deletions
diff --git a/src/client/views/nodes/PhysicsSimulationBox.tsx b/src/client/views/nodes/PhysicsSimulationBox.tsx
index e7d5e48f0..0f2bc43a0 100644
--- a/src/client/views/nodes/PhysicsSimulationBox.tsx
+++ b/src/client/views/nodes/PhysicsSimulationBox.tsx
@@ -7,6 +7,7 @@ import "./PhysicsSimulationBox.scss";
import Weight from "./PhysicsSimulationWeight";
import Wall from "./PhysicsSimulationWall"
import Wedge from "./PhysicsSimulationWedge"
+import { isUndefined } from "lodash";
export interface IForce {
description: string;
@@ -55,32 +56,6 @@ export default class PhysicsSimulationBox extends ViewBoxAnnotatableComponent<Fi
constructor(props: any) {
super(props);
- // this.dataDoc.coefficientOfKineticFriction = 0;
- // this.dataDoc.coefficientOfStaticFriction = 0;
- // this.dataDoc.currentForceSketch = [];
- // this.dataDoc.updateDisplay = false;
- // this.dataDoc.elasticCollisions = false;
- // this.dataDoc.forceSketches = [];
- // this.dataDoc.pendulumAngle = 0;
- // this.dataDoc.pendulumLength = 300;
- // this.dataDoc.positionXDisplay = 0;
- // this.dataDoc.positionYDisplay = 0;
- // this.dataDoc.showAcceleration = false;
- // this.dataDoc.showForceMagnitudes = false;
- // this.dataDoc.showForces = false;
- // this.dataDoc.showVelocity = false;
- // this.dataDoc.startForces = [this.forceOfGravity];
- // this.dataDoc.startPendulumAngle = 0;
- // this.dataDoc.startPosX = 0;
- // this.dataDoc.startPosY = 0;
- // this.dataDoc.stepNumber = 0;
- // this.dataDoc.updatedForces = [this.forceOfGravity];
- // this.dataDoc.velocityXDisplay = 0;
- // this.dataDoc.velocityYDisplay = 0;
- // this.dataDoc.wallPositions = [];
- // this.dataDoc.wedgeAngle = 26;
- // this.dataDoc.wedgeHeight = Math.tan((26 * Math.PI) / 180) * this.xMax*0.6;
- // this.dataDoc.wedgeWidth = this.xMax*0.6;
}
// Add one weight to the simulation
@@ -111,7 +86,6 @@ export default class PhysicsSimulationBox extends ViewBoxAnnotatableComponent<Fi
setToWedgeDefault () {
this.changeWedgeBasedOnNewAngle(26);
this.updateForcesWithFriction(this.dataDoc.coefficientOfStaticFriction);
- this.dataDoc.startForces = [this.forceOfGravity];
}
// Add a simple pendulum to the simulation
@@ -280,6 +254,38 @@ export default class PhysicsSimulationBox extends ViewBoxAnnotatableComponent<Fi
this.dataDoc.simulationType = "Free Weight"
this.addWeight()
}
+ this.dataDoc.accelerationXDisplay = this.dataDoc.accelerationXDisplay ?? 0;
+ this.dataDoc.accelerationYDisplay = this.dataDoc.accelerationYDisplay ?? 0;
+ this.dataDoc.coefficientOfKineticFriction = this.dataDoc.coefficientOfKineticFriction ?? 0;
+ this.dataDoc.coefficientOfStaticFriction = this.dataDoc.coefficientOfStaticFriction ?? 0;
+ this.dataDoc.currentForceSketch = this.dataDoc.currentForceSketch ?? [];
+ this.dataDoc.elasticCollisions = this.dataDoc.elasticCollisions ?? false;
+ this.dataDoc.forceSketches = this.dataDoc.forceSketches ?? [];
+ this.dataDoc.pendulumAngle = this.dataDoc.pendulumAngle ?? 26;
+ this.dataDoc.pendulumLength = this.dataDoc.pendulumLength ?? 300;
+ this.dataDoc.positionXDisplay = this.dataDoc.positionXDisplay ?? 0;
+ this.dataDoc.positionYDisplay = this.dataDoc.positionYDisplay ?? 0;
+ this.dataDoc.showAcceleration = this.dataDoc.showAcceleration ?? false;
+ this.dataDoc.showForceMagnitudes = this.dataDoc.showForceMagnitudes ?? false;
+ this.dataDoc.showForces = this.dataDoc.showForces ?? false;
+ this.dataDoc.showVelocity = this.dataDoc.showVelocity ?? false;
+ this.dataDoc.startForces = this.dataDoc.startForces ?? [this.forceOfGravity];
+ this.dataDoc.startPendulumAngle = this.dataDoc.startPendulumAngle ?? 0;
+ this.dataDoc.startPosX = this.dataDoc.startPosX ?? 0;
+ this.dataDoc.startPosY = this.dataDoc.startPosY ?? 0;
+ this.dataDoc.stepNumber = this.dataDoc.stepNumber ?? 0;
+ this.dataDoc.updateDisplay = this.dataDoc.updateDisplay ?? false;
+ this.dataDoc.updatedForces = this.dataDoc.updatedForces ?? [this.forceOfGravity];
+ this.dataDoc.velocityXDisplay = this.dataDoc.velocityXDisplay ?? 0;
+ this.dataDoc.velocityYDisplay = this.dataDoc.velocityYDisplay ?? 0;
+ this.dataDoc.wallPositions = this.dataDoc.wallPositions ?? [];
+ this.dataDoc.wedgeAngle = this.dataDoc.wedgeAngle ?? 26;
+ this.dataDoc.wedgeHeight = this.dataDoc.wedgeHeight ?? Math.tan((26 * Math.PI) / 180) * this.xMax*0.6;
+ this.dataDoc.wedgeWidth = this.dataDoc.wedgeWidth ?? this.xMax*0.6;
+
+ this.dataDoc.adjustPendulumAngle = true;
+ this.dataDoc.simulationPaused = true;
+ this.dataDoc.simulationReset = false;
// Add listener for SHIFT key, which determines if sketch force arrow will be edited or deleted on click
document.addEventListener("keydown", (e) => {
@@ -292,12 +298,6 @@ export default class PhysicsSimulationBox extends ViewBoxAnnotatableComponent<Fi
this.dataDoc.deleteMode = false;
}
});
-
- this.dataDoc.simulationPaused = true;
- this.dataDoc.simulationReset = false;
- this.dataDoc.accelerationXDisplay = 0;
- this.dataDoc.accelerationYDisplay = 0;
- this.dataDoc.adjustPendulumAngle = true;
}
componentDidUpdate() {
@@ -393,6 +393,7 @@ export default class PhysicsSimulationBox extends ViewBoxAnnotatableComponent<Fi
this.addWeight()
this.dataDoc.simulationType = "Free Weight"
}
+ this.dataDoc.simulationReset = !this.dataDoc.simulationReset
}} >TYPE</button>)}
</div>
</div>
diff --git a/src/client/views/nodes/PhysicsSimulationWeight.tsx b/src/client/views/nodes/PhysicsSimulationWeight.tsx
index f7755dc5c..e77cfa96a 100644
--- a/src/client/views/nodes/PhysicsSimulationWeight.tsx
+++ b/src/client/views/nodes/PhysicsSimulationWeight.tsx
@@ -190,7 +190,6 @@ export default class Weight extends React.Component<IWeightProps, IState> {
}
if (this.props.simulationReset != prevProps.simulationReset) {
- console.log('reset sim')
this.resetEverything();
}
if (this.props.adjustPendulumAngle != prevProps.adjustPendulumAngle) {
@@ -210,59 +209,58 @@ export default class Weight extends React.Component<IWeightProps, IState> {
}
// Update x start position
if (this.props.startPosX != prevProps.startPosX) {
- console.log('update start x pos')
this.setState({updatedStartPosX: this.props.dataDoc['startPosX']})
this.setState({xPosition: this.props.dataDoc['startPosX']})
this.setXPosDisplay(this.props.dataDoc['startPosX']);
}
// Update y start position
if (this.props.startPosY != prevProps.startPosY) {
- console.log('update start y pos')
this.setState({updatedStartPosY: this.props.dataDoc['startPosY']})
this.setState({yPosition: this.props.dataDoc['startPosY']})
this.setYPosDisplay(this.props.dataDoc['startPosY']);
}
- if (this.state.xVelocity != prevState.xVelocity) {
- console.log('check for kinetic friction')
- if (this.props.dataDoc['wedge'] && this.state.xVelocity != 0 && !this.state.kineticFriction) {
- this.setState({kineticFriction: true});
- //switch from static to kinetic friction
- const normalForce: IForce = {
- description: "Normal Force",
- magnitude:
- this.forceOfGravity.magnitude *
- Math.cos(Math.atan(this.props.dataDoc['wedgeHeight'] / this.props.dataDoc['wedgeWidth'] )),
- directionInDegrees:
- 180 - 90 - (Math.atan(this.props.dataDoc['wedgeHeight'] / this.props.dataDoc['wedgeWidth'] ) * 180) / Math.PI,
- };
- let frictionForce: IForce = {
- description: "Kinetic Friction Force",
- magnitude:
- this.props.dataDoc['coefficientOfKineticFriction'] *
- this.forceOfGravity.magnitude *
- Math.cos(Math.atan(this.props.dataDoc['wedgeHeight'] / this.props.dataDoc['wedgeWidth'] )),
- directionInDegrees:
- 180 - (Math.atan(this.props.dataDoc['wedgeHeight'] / this.props.dataDoc['wedgeWidth'] ) * 180) / Math.PI,
- };
- // reduce magnitude of friction force if necessary such that block cannot slide up plane
- let yForce = -this.forceOfGravity.magnitude;
- yForce +=
- normalForce.magnitude *
- Math.sin((normalForce.directionInDegrees * Math.PI) / 180);
- yForce +=
- frictionForce.magnitude *
- Math.sin((frictionForce.directionInDegrees * Math.PI) / 180);
- if (yForce > 0) {
- frictionForce.magnitude =
- (-normalForce.magnitude *
- Math.sin((normalForce.directionInDegrees * Math.PI) / 180) +
- this.forceOfGravity.magnitude) /
+ if (!this.props.dataDoc['simulationPaused']) {
+ if (this.state.xVelocity != prevState.xVelocity) {
+ if (this.props.dataDoc['wedge'] && this.state.xVelocity != 0 && !this.state.kineticFriction) {
+ this.setState({kineticFriction: true});
+ //switch from static to kinetic friction
+ const normalForce: IForce = {
+ description: "Normal Force",
+ magnitude:
+ this.forceOfGravity.magnitude *
+ Math.cos(Math.atan(this.props.dataDoc['wedgeHeight'] / this.props.dataDoc['wedgeWidth'] )),
+ directionInDegrees:
+ 180 - 90 - (Math.atan(this.props.dataDoc['wedgeHeight'] / this.props.dataDoc['wedgeWidth'] ) * 180) / Math.PI,
+ };
+ let frictionForce: IForce = {
+ description: "Kinetic Friction Force",
+ magnitude:
+ this.props.dataDoc['coefficientOfKineticFriction'] *
+ this.forceOfGravity.magnitude *
+ Math.cos(Math.atan(this.props.dataDoc['wedgeHeight'] / this.props.dataDoc['wedgeWidth'] )),
+ directionInDegrees:
+ 180 - (Math.atan(this.props.dataDoc['wedgeHeight'] / this.props.dataDoc['wedgeWidth'] ) * 180) / Math.PI,
+ };
+ // reduce magnitude of friction force if necessary such that block cannot slide up plane
+ let yForce = -this.forceOfGravity.magnitude;
+ yForce +=
+ normalForce.magnitude *
+ Math.sin((normalForce.directionInDegrees * Math.PI) / 180);
+ yForce +=
+ frictionForce.magnitude *
Math.sin((frictionForce.directionInDegrees * Math.PI) / 180);
- }
- if (this.props.dataDoc['coefficientOfKineticFriction'] != 0) {
- this.props.dataDoc['updatedForces'] = [this.forceOfGravity, normalForce, frictionForce];
- } else {
- this.props.dataDoc['updatedForces'] = ([this.forceOfGravity, normalForce]);
+ if (yForce > 0) {
+ frictionForce.magnitude =
+ (-normalForce.magnitude *
+ Math.sin((normalForce.directionInDegrees * Math.PI) / 180) +
+ this.forceOfGravity.magnitude) /
+ Math.sin((frictionForce.directionInDegrees * Math.PI) / 180);
+ }
+ if (this.props.dataDoc['coefficientOfKineticFriction'] != 0) {
+ this.props.dataDoc['updatedForces'] = [this.forceOfGravity, normalForce, frictionForce];
+ } else {
+ this.props.dataDoc['updatedForces'] = ([this.forceOfGravity, normalForce]);
+ }
}
}
}
@@ -503,6 +501,9 @@ export default class Weight extends React.Component<IWeightProps, IState> {
this.setState({yVelocity: yVel});
this.setState({xPosition: xPos});
this.setState({yPosition: yPos});
+
+ console.log("start forces" this.props.dataDoc['startForces'])
+ console.log("updated forces" this.props.dataDoc['updatedForces'])
this.props.dataDoc['updatedForces'] = (this.getNewForces(xPos, yPos, xVel, yVel));
};