" "RUN microstrip-radial-stub" "
"
"
";
string s;
string h;
string err = " ";
int rank = 0;
if (board) rank = 1;
string polyinit;
sprintf (polyinit, "CHANGE ORPHANS ON;\nCHANGE POUR SOLID;\nCHANGE RANK %d;\n", rank);
real wwidth2;
real RadiusL;
real angleL;
int test = 0;
// ******************** Functions ****************************
string esigname(string sig) {
if (sig) sig = "'" + sig + "'";
return sig;
}
// ************************************************************************
string xy_arc( real ang, real radius, real offx, real offy) {
string xy;
real rad = PI / 180 * ang;
sprintf(xy, "(%.4f %.4f)\n",
offx + (cos(rad) * radius),
offy + (sin(rad) * radius) );
return xy;
}
real bogenY2( real ang, real radius) {
real rad = PI / 180 * (ang/2);
return sin(rad) * radius;
}
real bogenX( real ang, real radius) {
real rad = PI / 180 * (ang/2);
return cos(rad) * radius;
}
// ***
real Xneu(real Xalt, real Yalt, real Xorigin, real Yorigin, real UserWinkel) {
real RADIUS = sqrt(((Xalt - Xorigin) * (Xalt - Xorigin)) + ((Yalt - Yorigin) * (Yalt - Yorigin)));
real WinkelNeu; /* alter Cosinus Winkel = (Xalt - Xorigin) / RADIUS; */
if ((Xalt > Xorigin) && (Yalt >= Yorigin)) { /* Quadrant 1 */
WinkelNeu = acos((Xalt - Xorigin) / RADIUS) * 57.29578 + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * cos(rad)); }
if ((Xalt < Xorigin) && (Yalt >= Yorigin)) { /* Quadrant 2 */
WinkelNeu = acos((Xalt - Xorigin) / RADIUS) * 57.29578 + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * cos(rad)); }
if ((Xalt < Xorigin) && (Yalt < Yorigin)) { /* Quadrant 3 */
WinkelNeu = 360 - acos((Xalt - Xorigin) / RADIUS) * 57.29578 + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * cos(rad)); }
if ((Xalt > Xorigin) && (Yalt < Yorigin)) { /* Quadrant 4 */
WinkelNeu = 360 - acos((Xalt - Xorigin) / RADIUS) * 57.29578 + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * cos(rad)); }
if ((Xalt == Xorigin) && (Yalt == Yorigin)) { /* Ursprung */
WinkelNeu = (Xalt - Xorigin) + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * cos(rad)); }
if ((Xalt == Xorigin) && (Yalt > Yorigin)) { /* 90° */
WinkelNeu = (Xalt - Xorigin + 90) + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * cos(rad)); }
if ((Xalt == Xorigin) && (Yalt < Yorigin)) { /* 270° */
WinkelNeu = (Xalt - Xorigin + 270)+ UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * cos(rad)); }
}
real Yneu(real Xalt, real Yalt, real Xorigin, real Yorigin, real UserWinkel) {
real RADIUS = sqrt(((Xalt - Xorigin) * (Xalt - Xorigin)) + ((Yalt - Yorigin) * (Yalt - Yorigin)));
real WinkelNeu; /* alter Cosinus Winkel = (Xalt - Xorigin) / RADIUS; */
if ((Xalt > Xorigin) && (Yalt >= Yorigin)) { /* Quadrant 1 */
WinkelNeu = acos((Xalt - Xorigin) / RADIUS) * 57.29578 + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * sin(rad)); }
if ((Xalt < Xorigin) && (Yalt >= Yorigin)) { /* Quadrant 2 */
WinkelNeu = acos((Xalt - Xorigin) / RADIUS) * 57.29578 + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * sin(rad)); }
if ((Xalt < Xorigin) && (Yalt < Yorigin)) { /* Quadrant 3 */
WinkelNeu = 360 - acos((Xalt - Xorigin) / RADIUS) * 57.29578 + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * sin(rad)); }
if ((Xalt > Xorigin) && (Yalt < Yorigin)) { /* Quadrant 4 */
WinkelNeu = 360 - acos((Xalt - Xorigin) / RADIUS) * 57.29578 + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * sin(rad)); }
if ((Xalt == Xorigin) && (Yalt == Yorigin)) { /* Ursprung */
WinkelNeu = (Xalt - Xorigin) + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * sin(rad)); }
if ((Xalt == Xorigin) && (Yalt > Yorigin)) { /* 90° */
WinkelNeu = (Xalt - Xorigin + 90) + UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * sin(rad)); }
if ((Xalt == Xorigin) && (Yalt < Yorigin)) { /* 270° */
WinkelNeu = (Xalt - Xorigin + 270)+ UserWinkel;
real rad = PI / 180 * WinkelNeu;
return (RADIUS * sin(rad)); }
}
real radiusY(real ang, real rry) {
real r = (rry*2) / sin(PI / 180 * ang) / 2;
return r;
}
string check_values(void) {
string error = "";
wwidth2 = width/2;
RadiusL = D + L - wwidth2;
angleL = angle - (width / ((RadiusL * 2 * PI) / 360));
arcsinXa = bogenX( angle, D) + wwidth2;
arcsinYa = bogenY2( angle, D + wwidth2) - wwidth2;
arcsinXe = arcsinXa;
arcsinYe = -arcsinYa;
if (arcsinYa < 0) {
sprintf(error, "
Set D to %.4f while W %.4f < wire width %.4f",
radiusY(angle/2, wwidth2), bogenX( angle, D), width );
}
return error;
}
// *** draw arc ***
string draw_arc(int draw_resol, real draw_radius, real draw_arc_degree, real draw_ang_off, real offx, real offy) {
real start_arc_degree = draw_ang_off - draw_arc_degree/2;
if (start_arc_degree < 0) start_arc_degree += 360;
real end_arc_degree = start_arc_degree + draw_arc_degree;
real arcstep = (end_arc_degree - start_arc_degree) / draw_resol;
string e;
for (real winkel = start_arc_degree; winkel < end_arc_degree + 0.0001; winkel += arcstep) {
e += xy_arc(winkel, draw_radius, offx, offy) ;
}
return e;
}
// *************************************************************
void menue(void) {
dlgDialog("Radial Stub") {
dlgHBoxLayout {
dlgSpacing(150);
dlgLabel("