Вычисление координат центра описанной окружности - QBasic
Формулировка задачи:
Задан треугольник координатами своих вершин
Требуется определить координаты центра описанной окружности
Сначала я аналитически решил эту задачу.
Потом написал программу. Она не только вычисляет координаты
центра описанной окружности. Но и вычисляет расстояние от
центра до каждой вершины. Все результаты выдаёт на экран.
Совпадение трёх последних чисел означает, что координаты вычисленного
центра соответствуют действительности, ведь такая точка только одна!!
(программа проверена)
Удачи вам!
Листинг программы
- DEFSNG A-C, R-S, X-Z
- CLS
- INPUT "KOORD. A(x,y)"; x1, y1
- INPUT "KOORD. B(x,y)"; x2, y2
- INPUT "KOORD. C(x,y)"; x3, y3
- DEF FNR (x, y, x0, y0)
- FNR = SQR((x - x0) ^ 2 + (y - y0) ^ 2)
- END DEF
- x12 = x1 - x2
- x23 = x2 - x3
- x31 = x3 - x1
- y12 = y1 - y2
- y23 = y2 - y3
- y31 = y3 - y1
- z = x12 * y31 - y12 * x31
- z1 = x1 ^ 2 + y1 ^ 2
- z2 = x2 ^ 2 + y2 ^ 2
- z3 = x3 ^ 2 + y3 ^ 2
- zx = y12 * z3 + y23 * z1 + y31 * z2
- zy = x12 * z3 + x23 * z1 + x31 * z2
- rx = -.5 * zx / z
- ry = .5 * zy / z
- PRINT "KOORDINATY CENTRA O = "; rx; ry
- PRINT FNR(x1, y1, rx, ry)
- PRINT FNR(x2, y2, rx, ry)
- PRINT FNR(x3, y3, rx, ry)
- END
Решение задачи: «Вычисление координат центра описанной окружности»
textual
Листинг программы
- DECLARE SUB pr0(r1, r2)
- DECLARE SUB pr1(x, y)
- DIM x(1 TO 2, t TO 3)
- DATA 1, 3, 1, 1, 3, 1
- FOR i=1 TO 3
- READ x(1, i), x(2, i)
- NEXT
- k11=x(1, 1)-x(1, 2)
- k12=x(2, 2)-x(2, 1)
- k21=x(1, 3)-x(1, 2)
- k22=x(2, 2)-x(2, 3)
- b11=k12*(x(2, 1)+x(2, 2))-k11*(x(1, 1)+x(1, 2))
- b12=k12*2
- b21=k22*(x(2, 2)+x(2, 3))-k21*(x(1, 2)+x(1, 3))
- b22=k22*2
- r1=(b12*b21-b11*b22)*k12*k22
- r2=(k11*k22-k12*k21)*b12*b22
- IF r1=0 AND r2=0 THEN
- FOR i=1 TO 3
- IF x(1, i)<min OR i=1 THEN min=x(1, i)
- IF x(1, i)>max OR i=1 THEN max=x(1, i)
- NEXT
- r1=max+min
- r2=2
- EndIf
- IF k12>0 THEN
- r3=r1*k11*b12+r2*k12*b11
- r4=r2*k12*b12
- ELSE
- r3=r1*k21*b22+r2*k22*b21
- r4=r2*k22*b22
- EndIf
- PRINT "x:"
- CALL pr1(r1, r2)
- CALL pr0(r1, r2)
- PRINT "y:"
- CALL pr1(r3, r4)
- CALL pr0(r3, r4)
- SLEEP
- SUB pr0(r1, r2)
- rr1$=STR$(r1)
- rr2$=STR$(r2)
- IF LEN(rr1$)>LEN(rr2$) THEN i=LEN(rr1$) ELSE i=LEN(rr2$)
- PRINT SPACE$((i-LEN(rr1$))/2)&rr1$
- PRINT STRING$(i, CHR$(196))
- PRINT SPACE$((i-LEN(rr2$))/2)&rr2$
- END SUB
- SUB pr1(x, y)
- i=2
- DO WHILE i<x
- IF x MOD i = 0 THEN
- IF y MOD i = 0 THEN x=x/i: y=y/i: i=i-1
- EndIf
- i=i+1
- LOOP
- END SUB
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д