This first finds the approximate indices for the zero-crossings, then interpolates to find the exact values:
sigma_x = 8;
sigma_y = -12;
tau_xy = -6;
theta = [-90:.05:90];
sigma_x1 = ((sigma_x + sigma_y)/2)+(((sigma_x - sigma_y)/2)*(cosd(2*theta)))+(tau_xy*(sind(2*theta)));
sigma_y1 = ((sigma_x + sigma_y)/2)-(((sigma_x - sigma_y)/2)*(cosd(2*theta)))-(tau_xy*(sind(2*theta)));
tau_x1y1 = -(((sigma_x - sigma_y)/2)*(sind(2*theta)))+(tau_xy*(cosd(2*theta)));
zci = @(v) find(v(:).*circshift(v(:), [-1 0]) <= 0);
tauzix = zci(tau_x1y1);
for k = 1:numel(tauzix)
xval(k) = interp1(tau_x1y1(tauzix(k)-1:tauzix(k)+1), theta(tauzix(k)-1:tauzix(k)+1), 0);
end
plot(theta, tau_x1y1)
hold on
plot(xval, zeros(size(xval)), 'pg')
hold off
xlabel('Degree of Rotation'), ylabel('Shear Stress'),title('Shear Stress Based on Rotation')
grid on, axis equal
Best Answer