-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCalculateCouple.razor
More file actions
121 lines (104 loc) · 4.06 KB
/
CalculateCouple.razor
File metadata and controls
121 lines (104 loc) · 4.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<h4 class="text-primary mb-4">Calculate Couple (Torque)</h4>
<div class="container">
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label">Force:</label>
<input type="text" class="form-control" @bind="force" placeholder="Force" />
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Distance between Forces:</label>
<input type="text" class="form-control" @bind="distance" placeholder="Distance" />
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Angle (degrees) or Sine/Cosine Enter cos and sin in x/y:</label>
<div class="input-group">
<input type="text" class="form-control" @bind="angle" placeholder="Enter angle in degrees" />
<span class="input-group-text">or</span>
<input type="text" class="form-control" @bind="sinInput" placeholder="sin" />
</div>
</div>
<div class="col-md-6 mb-3">
<label class="form-label">Direction Of Force:</label>
<select class="form-control" @bind="direction">
<option value="1">+ve (Counterclockwise)</option>
<option value="-1">-ve (Clockwise)</option>
</select>
</div>
</div>
<button class="btn animated-button mt-2" @onclick="CalculateTorque">Add Force and Calculate Couple</button>
<div class="mt-4 result-box">
<p class="fw-bold text-success"><strong>Total Couple (Torque):</strong> @totalTorque</p>
</div>
<h4 class="mt-4">Forces List:</h4>
<div class="list-group">
@foreach (var f in forces)
{
<div class="list-group-item">
Force: @f.Force, Distance: @f.Distance, Angle: @f.Angle, Torque: @f.Torque
</div>
}
</div>
</div>
@code {
private double force, distance, angle, totalTorque, sin;
private int direction = 1;
private List<Forces> forces = new List<Forces>();
private string? sinInput;
private void CalculateTorque()
{
if (force != 0 && distance != 0 && angle != 0)
{
Calculate_Components_in_degrees();
}
else if (force != 0 && distance != 0 && sinInput != null)
{
Calculate_Components_in_fractions();
}
totalTorque = 0;
foreach (var f in forces)
{
totalTorque += f.Torque;
}
totalTorque = Math.Round(totalTorque, 2);
}
private void Calculate_Components_in_degrees()
{
angle = NormalizeAngle(angle);
double radian = Math.PI * angle / 180;
double torque = Math.Round(direction * force * distance * Math.Sin(radian), 2);
forces.Add(new Forces(force, distance, angle, torque));
}
@* Abd-Allah Nasser*@
private void Calculate_Components_in_fractions()
{
double fraction;
if (!string.IsNullOrEmpty(sinInput))
{
var sinParts = sinInput.Split('/');
if (sinParts.Length == 2 && double.TryParse(sinParts[0], out double sinNumerator) && double.TryParse(sinParts[1], out double sinDenominator) && sinDenominator != 0)
{
sin = sinNumerator / sinDenominator;
}
fraction = sin;
angle = Math.Round(Math.Asin(fraction) * (180.0 / Math.PI), 2);
double torque = Math.Round(direction * force * distance * Math.Sin(Math.PI * angle / 180), 2);
forces.Add(new Forces(force, distance, angle, torque));
}
angle = NormalizeAngle(angle);
}
public class Forces
{
public double Force { get; set; }
public double Distance { get; set; }
public double Angle { get; set; }
public double Torque { get; set; }
public Forces(double force, double distance, double angle, double torque)
{
Force = force;
Distance = distance;
Angle = angle;
Torque = torque;
}
}
private double NormalizeAngle(double angle) => (angle % 360 + 360) % 360;
}