int type = 7;
size(400, 400);
bool flagA = false;
bool flagB = false;
bool flagC = false;
bool flagD = false;
bool flagA1 = false;
bool flagA2 = false;
bool flagR = true;
if(type == 0) {
flagB = true; flagC=true; flagD=true;
flagR = false;
}
if(type == 1) {
flagB = true; flagC = true;
}
if(type == 2) {
flagA = true; flagD = true;
}
if(type == 3) {
flagB = true; flagA1 = true;
}
if(type == 4) {
flagB = true; flagA2 = true;
}
if(type == 5) {
flagC = true; flagA1 = true;
}
if(type == 6) {
flagC = true; flagA2 = true;
}
if(type == 7) {
flagA1 = true; flagA2 = true;
}
string labelStr(real angle) {
return "$" + ((string) angle) + "^\circ$";
}
real r1 = 1;
real r2 = 2;
real k_1 = r1/r2;
real sideA = 20;
real angleB= 45;
real angleC = 15;
real angleD = 120;
real angleA = 180 - angleB - angleC;
real angleA1 = angleD - angleB;
real angleA2 = angleA - angleA1;
real radB= radians(angleB);
real radC = radians(angleC);
pair B = (0,0);
pair C = (B.x + sideA, B.y);
pair D = (B.x + sideA*k_1 /(1+k_1),B.y);
real xDiff = sideA * tan(radC) / (tan(radB) + tan(radC));
pair A = (B.x + xDiff, B.y + xDiff * tan(radB) );
path markB = anglemark(C,B,A,30);
path markD = anglemark(C,D,A,20);
path markC = anglemark(A,C,D, 50);
path markA = anglemark(B,A,C,30);
path markA1 = anglemark(B,A,D, 30);
path markA2 = anglemark(D,A,C,30);
draw(A--B--C--D--A--C);
if(flagB) draw(markB);
if(flagD) draw(markD);
if(flagC) draw(markC);
if(flagA) draw(markA);
if(flagA1) draw(markA1);
if(flagA2) draw(markA2);
label("$B$", B, W);
label("$C$", C, E);
label("$D$", D, SW);
label("$A$", A, N);
if(flagB) label(labelStr(angleB),markB, 2*NE + 2);
if(flagD) label(labelStr(angleD),markD, NE);
if(flagC) label(labelStr(angleC),markC, 2*NW - 8);
if(flagA) label(labelStr(angleA),markA, 4*SW + 1);
if(flagA1) label(labelStr(angleA1),markA1, 2*SW + 1);
if(flagA2) label(labelStr(angleA2),markA2, 2*SE);
if(flagR) {
label("$" + (string)r1 + "$", B--D, S);
label("$" + (string)r2 + "$", D--C, S);
}
dot(B);dot(C);dot(D);dot(A);
//7
path circ = circumcircle(A,B,C);
draw(circ, red);
pair O = circumcenter(A,B,C);
pair E = (O + O - A);
dot(E, red);
label("$E$", E, S, red);
draw(D--E, red + dashed);
draw(C--E, red + dashed);
draw(B--E, red + dashed);
pair H = foot(C, B, E);
dot(H, red);
label("H", H, S-0.5, red);
label("$\frac {3\sqrt 2}{2}$", B--H, red);
draw(C--H, red + dashed);
path markHBC = anglemark(H,B,C, 30);
path markBCH = anglemark(B,C,H, 30);
path markHCE = anglemark(H,C,E, 40);
draw(markHBC, red);
draw(markBCH, red);
draw(markHCE, red);
label(labelStr(45), markHBC, 1.2*SE + 2, red);
label(labelStr(45), markBCH, 1.2*SW-4, red);
label(labelStr(30), markHCE, 4.5*SW+2, red);
draw(rightanglemark(B,H,C, 20), red);
label("$\frac {3\sqrt 2}{2}$", C--H, red);
label("$\frac {\sqrt 6}{2}$", H--E, red);
label("$\sqrt 6$", C--E, blue);
draw(anglemark(C,E,D, 30, 35), blue);
label(labelStr(45), anglemark(C,E,D), 6*N, blue);
draw(anglemark(C,B,A, 30, 35), blue);