aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/views/nodes/PhysicsSimulationBox.scss8
-rw-r--r--src/client/views/nodes/PhysicsSimulationBox.tsx76
-rw-r--r--src/client/views/nodes/PhysicsSimulationWeight.tsx3
3 files changed, 61 insertions, 26 deletions
diff --git a/src/client/views/nodes/PhysicsSimulationBox.scss b/src/client/views/nodes/PhysicsSimulationBox.scss
index 7573f1472..0f05010b4 100644
--- a/src/client/views/nodes/PhysicsSimulationBox.scss
+++ b/src/client/views/nodes/PhysicsSimulationBox.scss
@@ -63,12 +63,10 @@ button {
z-index: 1000;
}
-.mechanicsSimulationSettingsMenuColumn {
+.mechanicsSimulationSettingsMenuRow {
display: flex;
- flex-direction: column;
- width: 50%;
}
-.mechanicsSimulationSettingsMenuContents {
- display: flex;
+.mechanicsSimulationSettingsMenuRowDescription {
+ width: 50%;
} \ No newline at end of file
diff --git a/src/client/views/nodes/PhysicsSimulationBox.tsx b/src/client/views/nodes/PhysicsSimulationBox.tsx
index 7eb9092bf..1a64ec795 100644
--- a/src/client/views/nodes/PhysicsSimulationBox.tsx
+++ b/src/client/views/nodes/PhysicsSimulationBox.tsx
@@ -119,6 +119,7 @@ export default class PhysicsSimulationBox extends ViewBoxAnnotatableComponent<Fi
let mag = 9.81 * Math.cos((angle * Math.PI) / 180);
this.dataDoc.pendulumAngle = angle;
this.dataDoc.pendulumLength = length;
+ this.dataDoc.startPendulumAngle = angle;
this.dataDoc.adjustPendulumAngle = !this.dataDoc.adjustPendulumAngle;
}
@@ -316,7 +317,7 @@ export default class PhysicsSimulationBox extends ViewBoxAnnotatableComponent<Fi
<div className="mechanicsSimulationElements">
{this.dataDoc.weight && (
<Weight
- adjustPendulumAnge={this.dataDoc.adjustPendulumAnge}
+ adjustPendulumAngle={this.dataDoc.adjustPendulumAngle}
color={"red"}
dataDoc={this.dataDoc}
mass={1}
@@ -326,6 +327,10 @@ export default class PhysicsSimulationBox extends ViewBoxAnnotatableComponent<Fi
startPosY={this.dataDoc.startPosY}
timestepSize={0.002}
updateDisplay={this.dataDoc.updateDisplay}
+ walls={this.dataDoc.wallPositions}
+ wedge={this.dataDoc.wedge}
+ wedgeWidth={this.dataDoc.wedgeWidth}
+ wedgeHeight={this.dataDoc.wedgeHeight}
xMax={this.xMax}
xMin={this.xMin}
yMax={this.yMax}
@@ -365,32 +370,63 @@ export default class PhysicsSimulationBox extends ViewBoxAnnotatableComponent<Fi
<FontAwesomeIcon icon={'times'} color="black" size={'lg'} />
</div>
<h4>Simulation Settings</h4>
- <div className="mechanicsSimulationSettingsMenuContents">
- <div className="mechanicsSimulationSettingsMenuColumn">
- <div><p>Show forces</p></div>
- <div><p>Show acceleration</p></div>
- <div><p>Show velocity</p></div>
- {this.dataDoc.simulationType == "Free Weight" && <div><p>Elastic collisions </p></div>}
- </div>
- <div className="mechanicsSimulationSettingsMenuColumn">
- <div><input type="checkbox" checked={this.dataDoc.showForces} onClick={() => {this.dataDoc.showForces = !this.dataDoc.showForces}}/></div>
- <div><input type="checkbox" checked={this.dataDoc.showAcceleration} onClick={() => {this.dataDoc.showAcceleration = !this.dataDoc.showAcceleration}}/></div>
- <div><input type="checkbox" checked={this.dataDoc.showVelocity} onClick={() => {this.dataDoc.showVelocity = !this.dataDoc.showVelocity}}/></div>
- {this.dataDoc.simulationType == "Free Weight" && <div><input type="checkbox" checked={this.dataDoc.elasticCollisions} onClick={() => {this.dataDoc.elasticCollisions = !this.dataDoc.elasticCollisions}}/></div>}
- </div>
+ <div className="mechanicsSimulationSettingsMenuRow">
+ <div className="mechanicsSimulationSettingsMenuRowDescription"><p>Show forces</p></div>
+ <div><input type="checkbox" checked={this.dataDoc.showForces} onClick={() => {this.dataDoc.showForces = !this.dataDoc.showForces}}/></div>
+ </div>
+ <div className="mechanicsSimulationSettingsMenuRow">
+ <div className="mechanicsSimulationSettingsMenuRowDescription"><p>Show acceleration</p></div>
+ <div><input type="checkbox" checked={this.dataDoc.showAcceleration} onClick={() => {this.dataDoc.showAcceleration = !this.dataDoc.showAcceleration}}/></div>
</div>
+ <div className="mechanicsSimulationSettingsMenuRow">
+ <div className="mechanicsSimulationSettingsMenuRowDescription">
+ <p>Show velocity</p></div>
+ <div><input type="checkbox" checked={this.dataDoc.showVelocity} onClick={() => {this.dataDoc.showVelocity = !this.dataDoc.showVelocity}}/></div>
+ </div>
+ <br/>
+ {this.dataDoc.simulationType == "Free Weight" && <div className="mechanicsSimulationSettingsMenuRow">
+ <div className="mechanicsSimulationSettingsMenuRowDescription"><p>Elastic collisions </p></div>
+ <div><input type="checkbox" checked={this.dataDoc.elasticCollisions} onClick={() => {this.dataDoc.elasticCollisions = !this.dataDoc.elasticCollisions}}/></div>
+ </div>}
+ {this.dataDoc.simulationType == "Pendulum" && <div className="mechanicsSimulationSettingsMenuRow">
+ <div className="mechanicsSimulationSettingsMenuRowDescription"><p>Pendulum start angle</p></div>
+ <div>
+ <input
+ type="number"
+ value={this.dataDoc.startPendulumAngle}
+ max={35}
+ min={0}
+ step={1}
+ onInput={(e) => {
+ let angle = e.target.value;
+ if (angle > 35) {
+ angle = 35
+ }
+ if (angle < 0) {
+ angle = 0
+ }
+ let length = this.xMax*0.7;
+ let x = length * Math.cos(((90 - angle) * Math.PI) / 180);
+ let y = length * Math.sin(((90 - angle) * Math.PI) / 180);
+ let xPos = this.xMax / 2 - x - this.radius;
+ let yPos = y - this.radius;
+ this.dataDoc.startPosX = xPos;
+ this.dataDoc.startPosY = yPos;
+ let mag = 9.81 * Math.cos((angle * Math.PI) / 180);
+ this.dataDoc.pendulumAngle = angle;
+ this.dataDoc.pendulumLength = length;
+ this.dataDoc.startPendulumAngle = angle;
+ this.dataDoc.adjustPendulumAngle = !this.dataDoc.adjustPendulumAngle;
+ }}
+ />
+ </div>
+ </div>}
{/* {this.dataDoc.simulationType == "Inclined Plane" &&
<div className="mechanicsSimulationSettingsMenuRow">
<p>Inclined plane angle </p>
<p>input field!</p>
</div>
} */}
- {/* {this.dataDoc.simulationType == "Pendulum" &&
- <div className="mechanicsSimulationSettingsMenuRow">
- <p>Pendulum angle </p>
- <p>input field!</p>
- </div>
- } */}
</div>
)}
</div>
diff --git a/src/client/views/nodes/PhysicsSimulationWeight.tsx b/src/client/views/nodes/PhysicsSimulationWeight.tsx
index 66af645b5..9aa5a6aab 100644
--- a/src/client/views/nodes/PhysicsSimulationWeight.tsx
+++ b/src/client/views/nodes/PhysicsSimulationWeight.tsx
@@ -293,6 +293,7 @@ export default class Weight extends React.Component<IWeightProps, IState> {
this.setState({xVelocity: this.props.startVelX ?? 0})
this.setState({yVelocity: this.props.startVelY ?? 0})
this.props.dataDoc['updatedForces'] = (this.props.dataDoc['startForces'])
+ this.setState({angleLabel: Math.round(this.props.dataDoc['pendulumAngle']* 100) / 100})
this.setDisplayValues();
};
@@ -356,7 +357,7 @@ export default class Weight extends React.Component<IWeightProps, IState> {
magnitude: mag,
directionInDegrees: angle,
};
- this.setState({angleLabel: Math.round(oppositeAngle * 100) / 100})
+ this.setState({angleLabel: Math.round(this.props.dataDoc['pendulumAngle']* 100) / 100})
return [this.forceOfGravity, forceOfTension];
};