// planes.asy
settings.outformat="pdf";
settings.tex="pdflatex";  
settings.prc = true;
settings.render = 0;
cd("../../../asy"); import jh; cd(""); define_texpreamble();

import graph3;
projection default_projection = orthographic(3,1.5,0.5,up=Z);
currentprojection = default_projection;
currentlight = nolight;

size3(0,5cm,0,keepAspect=true);  // Make y=5cm tall

// Define surfaces
real rotation_degs = 30;
path3 xy_edge = (0,0,0)--(3,0,0)--(3,4,0)--(0,4,0)--cycle;
surface xy = surface(xy_edge);
transform3 p_t = shift((0,2,0))*rotate(rotation_degs, X)*shift((0,-2,0));
path3 p_edge = p_t*xy_edge;
surface p = p_t*xy;

// Draw surfaces
draw(xy, surfacepen=figure_material);
draw(xy_edge, boundary_pen);
draw(p, surfacepen=figure_material);
draw(p_edge, boundary_pen);

// Draw the line of intersection
draw((0,2,0)--(3,2,0), boundary_pen);

// Normal vectors
path3 n = (0,0,0)--(0,0,1.5);
path3 n_xy = shift((3,2,0))*n;
path3 n_p = p_t*shift((3,2,0))*n;
draw(n_xy, HIGHLIGHT_COLOR, Arrow3(DefaultHead2));
draw(n_p, HIGHLIGHT_COLOR, Arrow3(DefaultHead2));

// Arc showing angle between normals
triple v1 = (0,0,0.4);   // Radius of the arc
triple v2 = rotate(rotation_degs,X)*(v1);
path3 n_angle_arc = arc(O, v1, v2);
draw("$\theta$", shift((3,2,0))*n_angle_arc,
     HIGHLIGHT_COLOR, Arrow3(DefaultHead2));  // Angle between normals
draw("$\theta$", shift((3,2,0))*rotate(-90,X)*n_angle_arc,
     HIGHLIGHT_COLOR, Arrow3(DefaultHead2)); // Angle between planes
