rm(list=ls())
#
#--------------------------------------------------------------------------
# In diesem Skript wird der Spannungsvektor in einer gedrehten Ebene 
# dargestellt. Ferner wird der Normaleneinheitsvektor der Ebene, 
# sowie die Zerlegung in Normal- und Scherspannung eingezeichnet.
# Aufgabe: Variieren Sie die Lage der Ebene solange, bis die Scherspannung
#          verschwindet. Was haben Sie jetzt gefunden?
#--------------------------------------------------------------------------
#
# Das ist der Spannungsvektor:
sv <- c(1,2,3)
#
# Punkte zur Festlegung der Ebene im Raum (Dreieck):
p1 <- c(5,1,0)
p2 <- c(0,0,6)
p3 <- c(0,2,0)
#
# Berechung des Dreiecksschwerpunktes zum Einzeichen des Spannungsvektors:
#x0 <- (1/3)*(c(p1[1]+p2[1]+p3[1],p1[2]+p2[2]+p3[2],p1[3]+p2[3]+p3[3]))
x0 <- (p1+p2+p3)/3
x1 <- x0 + sv # Endpunkt des Spannungsvektors
#
# Der Normaleneinheitsvektor der Ebene:
dp12 <- p2 - p1
dp13 <- p3 - p1
#
# Kreuzprodukt und Normalisierung:
nev <- c(dp12[2]*dp13[3] - dp12[3]*dp13[2],
         dp12[3]*dp13[1] - dp12[1]*dp13[3],
         dp12[1]*dp13[2] - dp12[2]*dp13[1])
nev0 <- -nev/sqrt(nev%*%nev) # Normaleneinheitsvektor         
#
# Normalspannung:
sigma <- (sv%*%nev0)*nev0
#
# Scherspannung:
tau <- sv - sigma
#
# ab jetzt: "nur" noch Zeichnen der Ebene und der Pfeile
#
# arrays für das Dreieck (Polygon) zum Zeichnen der Schnittebene:
#x <- c(p1[1],p1[2],p1[3])
#y <- c(p2[1],p2[2],p2[3])
#z <- c(p3[1],p3[2],p3[3])
x <- c(p1[1],p2[1],p3[1])
y <- c(p1[2],p2[2],p3[2])
z <- c(p1[3],p2[3],p3[3])
#
u <- c(0,0.001); v <- c(0,0.001) 
# Ein winziges Rechteck muss leider gezeichnet werden.
# Ich hoffe man sieht es nicht.
datmat <- outer(u,v)
#
persp(u,v,datmat, xlim = c(0,6), ylim= c(0,6), zlim = c(0,6),
     theta = 30, phi = 20, expand = 0.7, col = rgb(0,1,1),
     ltheta = 120, shade = 0.75, ticktype = "detailed",
     xlab = "X-Value", ylab = "\nY-Value", zlab = "ZV-Value", 
     main="Spannungsvektor",r=4,border=NA) -> rotmat
#
# hier wird jetzt das Dreieck eingezeichnet:
polygon (trans3d(x, y, z, pmat = rotmat), lwd=3, col = "lightgrey", border = "orange",lty=1)
#       
source("script_bm_fun_Pfeile.r")
ep.tau    <- x0 + tau
ep.sigma  <- x0 + sigma
ep.sv     <- x1
ep.nev0   <- x0+nev0
pfeil(x0,ep.sv,0.3,0.1,rotmat,"black")    
pfeil(x0,ep.sigma,0.3,0.1,rotmat,"blue")
pfeil(x0,ep.tau,0.3,0.1,rotmat,"blue")
pfeil(x0,ep.nev0,0.3,0.1,rotmat,"green")
text (trans3d(x1[1]-0.2, x1[2]+0.2, x1[3]+0.2, pmat = rotmat), "sv")
x <- c(ep.tau[1],ep.sv[1],ep.sigma[1])
y <- c(ep.tau[2],ep.sv[2],ep.sigma[2])
z <- c(ep.tau[3],ep.sv[3],ep.sigma[3])
lines(trans3d(x,y,z, pmat=rotmat), lty=2)
#
#   --- Schluss ---
#