Sxx = 20;
Syy = 15;
Sxy = 5;
Sold = S(Sxx, Syy, Sxy);
Snew = lambda T : R(T) * Sold * R(T).transpose();
Snewxx = lambda T : Snew(T)[0, 0];
Snewyy = lambda T : Snew(T)[1, 1];
Snewxy = lambda T : Snew(T)[0, 1];
Tmax = pi;
Pxx = plot(Snewxx, (0, Tmax), rgbcolor=[0.8, 0, 0], ticks=pi/4, tick_formatter=pi);
Pyy = plot(Snewyy, (0, Tmax), rgbcolor=[0, 0.8, 0], ticks=pi/4, tick_formatter=pi);
Pxy = plot(Snewxy, (0, Tmax), rgbcolor=[0.8, 0.8, 0], ticks=pi/4, tick_formatter=pi);
SNavg = mean([Sxx, Syy]);
SSmax = sqrt(0.25 * (Sxx - Syy)^2 + Sxy^2);
SSmin = -SSmax;
SNmax = SNavg + SSmax;
SNmin = SNavg - SSmax;
PPSN1 = 0.5 * atan2(2 * Sxy, Sxx - Syy);
PPSN2 = PPSN1 + pi / 2;
PPSS1 = PPSN1 + pi / 4;
PPSS2 = PPSS1 + pi / 2;
LSNmax = line([[0, SNmax], [0.94 * Tmax, SNmax]], rgbcolor=[0.25, 0.25, 1], linestyle='--');
LSNmin = line([[0, SNmin], [0.94 * Tmax, SNmin]], rgbcolor=[0.25, 0.25, 1], linestyle='--');
LSSmax = line([[0, SSmax], [0.94 * Tmax, SSmax]], rgbcolor=[0, 0, 0.5], linestyle='--');
LSSmin = line([[0, SSmin], [0.94 * Tmax, SSmin]], rgbcolor=[0, 0, 0.5], linestyle='--');
TSNmax = text(round(SNmax, ndigits=2), (0.95 * Tmax, SNmax), horizontal_alignment='left', vertical_alignment='center');
TSNmin = text(round(SNmin, ndigits=2), (0.95 * Tmax, SNmin), horizontal_alignment='left', vertical_alignment='center');
TSSmax = text(round(SSmax, ndigits=2), (0.95 * Tmax, SSmax), horizontal_alignment='left', vertical_alignment='center');
TSSmin = text(round(SSmin, ndigits=2), (0.95 * Tmax, SSmin), horizontal_alignment='left', vertical_alignment='center');
LPPSN1 = line([[PPSN1, SNmin], [PPSN1, SNmax]], rgbcolor=[0.25, 0.25, 1], linestyle=':');
LPPSN2 = line([[PPSN2, SNmin], [PPSN2, SNmax]], rgbcolor=[0.25, 0.25, 1], linestyle=':');
LPPSS1 = line([[PPSS1, SSmin], [PPSS1, 0]], rgbcolor=[0, 0, 0.5], linestyle=':');
LPPSS2 = line([[PPSS2, 0], [PPSS2, SSmax]], rgbcolor=[0, 0, 0.5], linestyle=':');
# red: normal stress along the x' axis
# green: normal stress along the y' axis
# yellow: shear stress along the x'y' plane
# dashed light-blue: maximum and minimum normal stress
# dotted light-blue: angle in which maximum and minimum normal stresses occur
# dashed dark-blue: maximum and minimum shear stress
# dotted dark-blue: angle in which maximum and minimum shear stresses occur
show(Pxx + Pyy + Pxy + LSNmax + LSNmin + LSSmax + LSSmin + TSNmax + TSNmin + TSSmax + TSSmin + LPPSN1 + LPPSN2 + LPPSS1 + LPPSS2);