Эта страница  посвящена геометриии.

Некоторые юзеры низкого мнения о графических возможностях 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 гр.

Конструктор сайтов - uCoz