Эта страница посвящена геометриии. Некоторые юзеры низкого мнения о графических возможностях QBasic-a. Но его вполне можно использовать при изучении школьного курса геометрии. Первая программа - построение правильных многоугольников. Затем показаны программы, которые строят треугольники по вводимым параметрам (сторонам и углам). Понятно, что размеры будут выражены в неких условных единицах, зависящих от коэффициента увеличения. Также могут проводиться медианы, биссектрисы и высоты,вписанные и описанные окружности. ‘ Рисуется правильный многоугольник,проводятся все его диагонали,затем оставляется звезда SCREEN 12 INPUT " число сторон n=", n INPUT "поворот в радианах f="; f CLS PAINT (30, 30),
15 COLOR 0 DIM X(50) DIM Y(50) r = 20 FOR I = 1 TO n X(I) = r * COS(2 * 3.1415 * I / n + 1.57 + f) Y(I) = r * SIN(2 * 3.1415 * I / n + 1.57 + f) NEXT FOR I = 1 TO n PSET (300 + 10 * X(I), 240 - 10 * Y(I)) NEXT FOR I = 1 TO n - 1 LINE (300 + 10 * X(I), 240 - 10 * Y(I))-(300 + 10 *
X(I + 1), 240 - 10 * Y(I + 1)) NEXT LINE (300 + 10 * X(1), 240 - 10 * Y(1))-(300 + 10 *
X(n), 240 - 10 * Y(n)) SLEEP FOR I = 1 TO n FOR K = 1 TO n LINE (300 + 10 * X(I), 240 - 10 * Y(I))-(300 + 10 *
X(K), 240 - 10 * Y(K)) NEXT NEXT SLEEP FOR I = 1 TO n - 1 LINE (300 + 10 * X(I), 240 - 10 * Y(I))-(300 + 10 *
X(I + 1), 240 - 10 * Y(I + 1)), 15 NEXT LINE (300 + 10 * X(1), 240 - 10 * Y(1))-(300 + 10 *
X(n), 240 - 10 * Y(n)), 15 SLEEP
'построение треугольника по 3-м сторонам и проведение медиан, ' серединных перпендикуляров и описанной(O-центр) и вписанной окружностей. 'Если чертеж слишком мелок,перезапустить с большим коэф. увеличения. 'После каждой операции нажимать Enter CLS SCREEN 12 COLOR 9 LOCATE (1), (5): PRINT "A" DIM a%(100) GET (30, 0)-(40, 15), a% LOCATE (1), (5): PRINT "B" DIM b%(100) GET (30, 0)-(40, 15), b% LOCATE (1), (5): PRINT "C" DIM c%(100) GET (30, 0)-(40, 15), c% LOCATE (1), (5): PRINT "O" DIM o%(100) GET (30, 0)-(40, 15), o% CLS COLOR 9 2 INPUT "коэффициент увеличения k="; k COLOR 15 LINE (0, 0)-(640, 480), 15, BF q = 1 + k / 10 INPUT " c=", c INPUT " b=", b INPUT " a=", a IF c <= SQR(b ^ 2 + a ^ 2) THEN i = 1 ELSE i = -1: q = .5 * q IF a + b <= c THEN 1 IF b + c <= a THEN 1 IF a + c <= b THEN 1 xcn = (b ^ 2 + c ^ 2 - a ^ 2) / 2 / c xa = 300 / k xb = xa + 20 * k * c IF xb > 630 THEN PRINT "уменьшить к или стороны прпорционально": GOTO 2 xc = xa + 20 * k * xcn IF xc > 630 OR xc < 0 THEN PRINT "уменьшить к или стороны прпорционально": GOTO 2 yab = 250 * q ycn = SQR(b ^ 2 - xcn ^ 2) yc = yab - 20 * k * ycn IF yc < 6 THEN PRINT "уменьшить к или стороны пропоционально": GOTO 2 COLOR 8 LINE (xa, yab)-(xb, yab) 'сторона AB:(c) LINE (xa, yab)-(xc, yc) 'сторона AC:(b) LINE (xb, yab)-(xc, yc) 'сторона BC:(a) PUT (xa - 10, yab + 2), a% PUT (xb + 1, yab), b% PUT (xc, yc - 14), c% SLEEP xma = (xb + xc) / 2 yma = (yab + yc) / 2 LINE (xa, yab)-(xma, yma) SLEEP xmb = (xa + xc) / 2 ymb = (yab + yc) / 2 LINE (xb, yab)-(xmb, ymb) SLEEP xmc = (xa + xb) / 2 LINE (xc, yc)-(xmc, yab) SLEEP p = (a + b + c) / 2 s = SQR(p * (p - a) * (p - b) * (p - c)) r = a * b * c / 4 / s dr = SQR(r ^ 2 - (c / 2) ^ 2) yr = yab - 20 * k * dr * i xr = xa + 10 * k * c r = 20 * k * r CIRCLE (xr, yr), r PUT (xr + 1, yr), o% LINE (xma, yma)-(xr, yr) LINE (xmb, ymb)-(xr, yr) LINE (xmc, yab)-(xr, yr) csc = (a ^ 2 + b ^ 2 - c ^ 2) / 2 / a / b snc = SQR(1 - csc ^ 2) IF csc < 0 THEN uc = 3.14159 + ATN(snc / csc) ELSE uc = ATN(snc / csc) snb = b * snc / c csb = (a ^ 2 + c ^ 2 - b ^ 2) / 2 / a / c IF csb < 0 THEN ub = 3.14159 + ATN(snb / csb) ELSE ub = ATN(snb / csb) ua = 3.14159 - uc - ub SLEEP p = (b + c + a) / 2 s = SQR(p * (p - b) * (p - c) * (p - a)) r = 20 * k * s / p dr = r / TAN(ua / 2) xr = xa + dr yr = yab - r CIRCLE (xr, yr), r SLEEP END 1 PRINT "не существует"
Пример построения показан ниже.Здесь к=1.8 ; c=8; b=6 ;a=10 |
*********************************************************** Несколько сложнее проводить высоты, т.к. в случае тупых углов надо продлевать стороны. Нужно учесть все случаи. 'построение треугольника по 2-м сторонам и углу и проведение высот. CLS SCREEN 12 COLOR 7 LOCATE (1), (5): PRINT "A" DIM A%(100) GET (30, 0)-(40, 15), A% LOCATE (1), (5): PRINT "B" DIM b%(100) GET (30, 0)-(40, 15), b% LOCATE (1), (5): PRINT "C" DIM c%(100) GET (30, 0)-(40, 15), c% LOCATE (1), (5): PRINT "D" DIM d%(100) GET (30, 0)-(40, 15), d% LOCATE (1), (5): PRINT "E" DIM e%(100) GET (30, 0)-(40, 15), e% LOCATE (1), (5): PRINT "F" DIM f%(100) GET (30, 0)-(40, 15), f% CLS
1 INPUT " k="; k LINE (0, 0)-(640, 480), 15, BF COLOR 15 INPUT " c=", c INPUT " b=", b INPUT " Ug A=(гр.)", ugA xa = 300 / k ugA = ugA * 3.1416 / 180 xcn = b * COS(ugA) xc = xa + 20 * k * xcn 'абцисса высоты из вершины С и вершины С xb = xa + 20 * k * c 'абцисса вершины B IF xc < 0 THEN PRINT "уменьшить k": GOTO 1 yab = 250 * (1 + k / 10) yc = yab - 20 * k * SQR(b ^ 2 - xcn ^ 2) 'ордината вершины С IF yc < 0 THEN PRINT "уменьшить к": GOTO 1 IF xb > 640 THEN PRINT "уменьшить к": GOTO 1 IF xc > 640 THEN PRINT "уменьшить k": GOTO 1 COLOR 8 LINE (xa, yab)-(xb, yab) 'сторона AB:(c) LINE (xa, yab)-(xc, yc) 'сторона AC:(b) LINE (xb, yab)-(xc, yc) 'сторона BC:(a) PUT (xa - 7, yab + 4), A% PUT (xb + 1, yab), b% IF yc > 8 THEN IF xc < 635 THEN PUT (xc + 3, yc - 8), c% END IF SLEEP db = 20 * k * c * (COS(ugA)) ^ 2 'проекция ABn на AB (Bn-основание высоты из B) xbn = xa + db 'абцисса высоты из вершины B ybn = yab - db * TAN(ugA) LINE (xb, yab)-(xbn, ybn)'высота из вершины B! LINE (xb, yab)-(xc, yab) 'продолжение стороны AB до основания высоты из C SLEEP bc = SQR(c ^ 2 + b ^ 2 - 2 * b * c * COS(ugA)) sb = b * SIN(ugA) / bc 'синус угла B cb = SQR(1 - sb ^ 2) 'косинус угла B T = ABS(sb / cb) IF xc < xb THEN ugb = ATN(T) ELSE ugb = 3.14159 - ATN(T) ugc = 3.14159 - ugb - ugA da = 20 * k * c * cb ^ 2 'проекция BAn на AB (An-основание высоты из A) xan = xb - da 'абцисса основания высоты из A IF xb > xc THEN yan = yab - da * sb / cb IF xc >= xb THEN yan = yab + da * sb / cb LINE (xa, yab)-(xan, yan) 'высота из A! SLEEP xc = xa + b * COS(ugA) * 20 * k 'абцисса вершины C xcn = xb - c * cb ^ 2 * 20 * k ycn = yab - c * sb * cb * 20 * k LINE (xc, yc)-(xc, yab) 'высота из вершины С IF ugA > 1.57 THEN LINE (xa, yab)-(xc, yab) LINE (xa, yab)-(xbn, ybn) END IF IF xc > xb THEN LINE (xb, yab)-(xan, yan) IF ugc > 1.57 THEN LINE (xc, yc)-(xbn, ybn) LINE (xc, yc)-(xan, yan) END IF PUT (xc + 1, yab + 3), d% PUT (xan + 3, yan - 8), e% IF ybn < 470 THEN PUT (xbn - 10, ybn - 8), f% LINE (xa, yab)-(xb, yab), 2 LINE (xa, yab)-(xc, yc), 2 LINE (xb, yab)-(xc, yc), 2
PRINT " ug B="; INT(ugb * 180 / 3.14159 * 100) / 100 PRINT " ug C="; INT(ugc * 180 / 3.14159 * 100) / 100 PRINT " a="; INT(bc * 100) / 100 SLEEP
Пример построения :k=2;c=6;b=10;угол A=30 гр.Треугольник ABC выделен цветом.Высоты AE;FB;CD.
***************************************************************** Построение тр-ка по стороне и 2-м углам,проведение бисектрис и вписанной,описанной и вневписанной окружностей
CLS SCREEN 12 COLOR 9 LOCATE (1), (5): PRINT "A" DIM a%(100) GET (30, 0)-(40, 15), a% LOCATE (1), (5): PRINT "B" DIM b%(100) GET (30, 0)-(40, 15), b% LOCATE (1), (5): PRINT "C" DIM c%(100) GET (30, 0)-(40, 15), c% LOCATE (1), (5): PRINT "O" DIM o%(100) GET (30, 0)-(40, 15), o% LOCATE (1), (5): PRINT "E" DIM e%(100) GET (30, 0)-(40, 15), e% CLS COLOR 9 1 INPUT " k="; k LINE (0, 0)-(640, 480), 15, BF COLOR 15 INPUT " c=", c PRINT "в градусах" INPUT " Ug B=", ub INPUT " Ug A=", ua uc = 180 - ua - ub ub = ub * 3.1416 / 180 ua = ua * 3.1416 / 180 uc = uc * 3.1416 / 180 xa = 50 yab = 250 * (1 + k / 10) xb = xa + 20 * k * c IF xb > 640 OR xb < 0 THEN PRINT "уменьшить к или пропорционально сторону": GOTO 1 xcn = c * SIN(ub) * COS(ua) / SIN(ua + ub) xc = xa + 20 * k * xcn IF xc - 5 > 640 OR xc < 0 THEN PRINT "уменьшить к или пропорционально сторону": GOTO 1 ycn = c * SIN(ua) * SIN(ub) / SIN(ua + ub) yc = yab - 20 * k * ycn IF yc < 0 THEN PRINT "уменьшить к": GOTO 1 COLOR 8 LINE (xa, yab)-(xb, yab) 'сторона AB LINE (xa, yab)-(xc, yc) 'сторона AC LINE (xb, yab)-(xc, yc) 'сторона BC PUT (xa - 4, yab + 2), a% PUT (xb + 1, yab), b% PUT (xc - 5, yc - 14), c% SLEEP c = 20 * k * c b = c * SIN(ub) / SIN(uc) a = c * SIN(ua) / SIN(uc) xbisa = (b * xb + c * xc) / (b + c) ybisa = yab - ((xbisa - xa) * TAN(ua / 2)) LINE (xa, yab)-(xbisa, ybisa) SLEEP xbisc = (b * xb + a * xa) / (a + b) LINE (xc, yc)-(xbisc, yab) SLEEP xbisb = (a * xa + c * xc) / (c + a) ybisb = yab - (xb - xbisb) * TAN(ub / 2) LINE (xb, yab)-(xbisb, ybisb) SLEEP c = c / 20 / k b = b / 20 / k a = a / 20 / k p = (b + c + a) / 2 s = SQR(p * (p - b) * (p - c) * (p - a)) r = 20 * k * s / p dr = r / TAN(ua / 2) xr = xa + dr yr = yab - r CIRCLE (xr, yr), r LINE (xr, yr)-(xr, yab) PUT (xr + 1, yr + 2), o% SLEEP rva = 20 * k * s / (p - a) xe = xa + 20 * k * p IF xe < 0 OR xe > 640 THEN PRINT "уменьшить k": GOTO 1 ye = yab - rva IF ye < 0 THEN PRINT "уменьшить k": GOTO 1 CIRCLE (xe, ye), rva LINE (xb, yab)-(xe + 100, yab) LINE (xbisa, ybisa)-(xe, ye) LINE (xb, yab)-(xe, ye) LINE (xc, yc)-(150 + xc, yc + 150 * (yc - yab) / (xc - xa)) LINE (xc, yc)-(xe, ye) LINE (xe, yab)-(xe, ye) PUT (xe + 1, ye + 2), e% SLEEP IF c ^ 2 > a ^ 2 + b ^ 2 THEN i = -1 ELSE i = 1 r = a * b * c / 4 / s dr = SQR(ABS(r ^ 2 - (c / 2) ^ 2)) yr = yab - 20 * k * dr * i xr = xa + 10 * k * c r = 20 * k * r CIRCLE (xr, yr), r SLEEP END
K=1.5; c=10; < B=60 гр. <A=30 гр. |