1
0
mirror of https://gitlab.com/MisterBiggs/aero-astro-calc.git synced 2025-06-15 22:56:47 +00:00

added mohrs circle plotter

This commit is contained in:
Anson 2020-01-20 16:57:32 -07:00
parent b4855eb735
commit 6460344bc5

View File

@ -2,6 +2,7 @@ from math import sqrt
from bokeh.models import Arrow
from bokeh.plotting import figure, show
from numpy import linspace, sin, cos, pi
from aero_astro_calc.dependencies.LatexLabel import LatexLabel
@ -63,7 +64,7 @@ class PlaneStress:
LatexLabel(
x=-1.8,
y=1.8,
text=f"\sigma_1 = {round(self.sigma_1,4)}",
text=f"\\sigma_1 = {round(self.sigma_1,4)}",
render_mode="css",
)
)
@ -71,7 +72,7 @@ class PlaneStress:
LatexLabel(
x=-1.8,
y=1.4,
text=f"\sigma_2 = {round(self.sigma_2,4)}",
text=f"\\sigma_2 = {round(self.sigma_2,4)}",
render_mode="css",
)
)
@ -85,3 +86,74 @@ class PlaneStress:
)
show(plot)
def mohr(self):
padding = 1.3
midpoint = (self.sigma_1 + self.sigma_2) / 2
plot = figure(
x_range=[
(midpoint - self.tau_max) * padding,
(midpoint + self.tau_max) * padding,
],
y_range=[-self.tau_max * padding, self.tau_max * padding],
)
# Bokeh circle is stupid so it has to be done the hard way.
theta = linspace(0, 2 * pi, 200)
sig1 = self.tau_max * cos(theta) + midpoint
sig2 = self.tau_max * sin(theta)
plot.line(x=sig1, y=sig2)
# x axis
plot.line(
x=[
(midpoint - self.tau_max) * padding,
(midpoint + self.tau_max) * padding,
],
y=[0, 0],
line_color="black",
)
# y axis
plot.line(
x=[0, 0],
y=[self.tau_max * padding, self.tau_max * -padding],
line_color="black",
)
# Labels
# sigma_1
plot.circle(x=midpoint + self.tau_max, y=0, size=self.tau_max * 0.2)
plot.add_layout(
LatexLabel(
x=midpoint + self.tau_max,
y=self.tau_max * -0.1,
text=f"\\sigma_1 = {round(self.sigma_1)}",
render_mode="css",
)
)
# sigma_2
plot.circle(x=midpoint - self.tau_max, y=0, size=self.tau_max * 0.2)
plot.add_layout(
LatexLabel(
x=midpoint - self.tau_max,
y=self.tau_max * -0.1,
text=f"\\sigma_2 = {round(self.sigma_2)}",
render_mode="css",
)
)
# tau_max
plot.circle(x=midpoint, y=self.tau_max, size=sqrt(self.tau_max))
plot.add_layout(
LatexLabel(
x=midpoint,
y=self.tau_max * 0.9,
text=f"\\tau_{{max}} = {round(self.tau_max)}",
render_mode="css",
)
)
show(plot)