#define STRENGTH_SCALE 1.5e7 #define SPRING_SCALE 6.0e6 #define COST_SCALE 375.0 #define MASS_RADIUS 3.0 #define MASS_MASS 10.0 #define WIRE_PERCENT 0.99 #define RIVER_BANK_COLS 5 #define SKY_LINES 40 #define FIXED_X1 ((RIVER_BANK_COLS - 1) * FONT_WIDTH) #define FIXED_X2 ((RIVER_BANK_COLS - 4) * FONT_WIDTH) #define FIXED_X3 (TEXT_COLS * FONT_WIDTH >> 1) #define FIXED_Y1 ((SKY_LINES + 1) * FONT_HEIGHT) #define FIXED_Y2 ((SKY_LINES + 5) * FONT_HEIGHT) #define FIXED_Y3 ((SKY_LINES + 12) * FONT_HEIGHT) #define LOAD_WEIGHTS 8 U0 SpanBridge1Init(CMathODE *) { I64 i; MyMass *tmpm; tmpm=PlaceMass(GR_WIDTH - FIXED_X1, FIXED_Y1); tmpm->flags |= MSF_FIXED; tmpm=PlaceMass(GR_WIDTH - FIXED_X2, FIXED_Y1); tmpm->flags |= MSF_FIXED; tmpm=PlaceMass(GR_WIDTH - FIXED_X1, FIXED_Y2); tmpm->flags |= MSF_FIXED; tmpm=PlaceMass(FIXED_X1, FIXED_Y1); tmpm->flags |= MSF_FIXED; tmpm=PlaceMass(FIXED_X2, FIXED_Y1); tmpm->flags |= MSF_FIXED; tmpm=PlaceMass(FIXED_X1, FIXED_Y2); tmpm->flags |= MSF_FIXED; tmpm=PlaceMass(FIXED_X3, FIXED_Y3); tmpm->flags |= MSF_FIXED; for (i = 0; i < LOAD_WEIGHTS; i++) { tmpm = PlaceMass(FIXED_X1 + (i + 1) * (GR_WIDTH - 2 * FIXED_X1) / (LOAD_WEIGHTS + 1), FIXED_Y1); tmpm->load_t = (i + 1.0) / LOAD_WEIGHTS; tmpm->color = RED; } DocClear; "$BG,LTCYAN$%h*c", SKY_LINES, '\n'; for (i = 0; i < 10; i++) { "$BG,BROWN$%h*c", RIVER_BANK_COLS, CH_SPACE; "$BG,LTCYAN$%h*c", TEXT_COLS - 2 * RIVER_BANK_COLS, CH_SPACE; "$BG,BROWN$%h*c\n", RIVER_BANK_COLS, CH_SPACE; } for (i = 0; i < 5; i++) { "$BG,BROWN$%h*c", RIVER_BANK_COLS + i, CH_SPACE; "$BG,BLUE$%h*c", TEXT_COLS / 2 -RIVER_BANK_COLS - 2 * i, CH_SPACE; "$BG,BROWN$%h*c", 2 * i, CH_SPACE; "$BG,BLUE$%h*c", TEXT_COLS / 2 - RIVER_BANK_COLS - 2 * i, CH_SPACE; "$BG,BROWN$%h*c\n", RIVER_BANK_COLS + i, CH_SPACE; } } U0 AdjustLoads(CMathODE *ode) { MyMass *tmpm = ode->next_mass; F64 d, tt = SpanTime / 10.0; while (tmpm != &ode->next_mass) { if (tmpm->load_t) { if (tt) { d = Abs(Sin(tmpm->load_t * pi + tt)); //0.0<=d<=1.0 tmpm->mass = 100.0 * Sqr(Sqr(d + 1.0)); tmpm->radius = 7.0 * d + 2.0; } else { tmpm->mass = MASS_MASS; tmpm->radius = MASS_RADIUS; } } tmpm = tmpm->next; } }