Построить множество всех треугольников с вершинами в заданных точках, которые не пересекаются - QBasic
Формулировка задачи:
Заданное случайное множество точек. Построить множество всех треугольников с вершинами в заданных точках, которые не пересекаются. Часть проги уже есть, но треугольники пересеются, теперь нужно сделать, что бы не пересекались. Большое спасибо
Листинг программы
- CLS
- INPUT "vvedit' k-t' tochok N="; N
- INPUT "vvedit' granuchni ymovu xmin="; xmin
- INPUT "vvedit' xmax="; xmax
- INPUT "vvedit' ymin="; ymin
- INPUT "vvedit' ymax="; ymax
- SCREEN 12
- VIEW (10, 10)-(400, 400), , 1
- WINDOW (xmin, ymin)-(xmax, ymax)
- DIM x(N)
- DIM y(N)
- FOR i = 1 TO N
- x(i) = xmin + RND * (xmax - xmin)
- y(i) = ymin + RND * (ymax - ymin)
- NEXT
- FOR i = 1 TO N
- PSET (x(i), y(i)), 5
- NEXT
- FOR i = 1 TO N - 2 STEP 3
- LINE (x(i), y(i))-(x(i + 1), y(i + 1))
- LINE (x(i + 1), y(i + 1))-(x(i + 2), y(i + 2))
- LINE (x(i + 2), y(i + 2))-(x(i), y(i))
- NEXT
Решение задачи: «Построить множество всех треугольников с вершинами в заданных точках, которые не пересекаются»
textual
Листинг программы
- DEFSNG X-Y
- DEFINT I-J, Z
- OPTION BASE 1
- CLS
- DO
- INPUT "Vvedite N KRATNOE 3"; n
- LOOP WHILE n < 3 AND n MOD 3 <> 0
- DIM x(n)
- DIM y(n)
- DIM z(n)
- FOR i = 1 TO n
- x(i) = 20 * RND - 10
- y(i) = 20 * RND - 10
- z(i) = 0
- NEXT i
- z0 = -10
- zz = -10
- SCREEN 12
- WINDOW (-10, 10)-(10, -10)
- FOR j = 0 TO n - 3 STEP 3
- x1 = x(1 + j)
- y1 = y(1 + j)
- x2 = x(2 + j)
- y2 = y(2 + j)
- x3 = x(3 + j)
- y3 = y(3 + j)
- z(1 + j) = 1
- z(2 + j) = 1
- z(3 + j) = 1
- IF y1 > y2 THEN
- SWAP y1, y2
- SWAP x1, x2
- END IF
- IF y1 > y3 THEN
- SWAP y1, y3
- SWAP x1, x3
- END IF
- IF y2 > y3 THEN
- SWAP y2, y3
- SWAP x2, x3
- END IF
- FOR i = 4 + j TO n
- IF y1 > y(i) AND y(1) > z0 AND z(i) = 0 THEN
- y1 = y(i)
- x1 = x(i)
- z(1 + j) = 1
- ELSEIF y2 > y(i) AND y(2) > z0 AND z(i) = 0 THEN
- y2 = y(i)
- x2 = x(i)
- z(2 + j) = 1
- ELSEIF y3 > y(3) AND y(3) > z0 AND z(i) = 0 THEN
- y3 = y(i)
- x3 = x(i)
- z(3 + j) = 1
- zz = y3
- END IF
- NEXT i
- LINE (x1, y1)-(x2, y2), 11
- LINE (x2, y2)-(x3, y3), 11
- LINE (x3, y3)-(x1, y1), 11
- z0 = zz
- NEXT j
- END
Объяснение кода листинга программы
Код на языке QBasic выполняет следующие действия:
- Запрашивает у пользователя ввод количества вершин треугольников (n).
- Генерирует случайные координаты для каждой вершины (x(i), y(i)).
- Инициализирует переменную z(i) для каждой вершины значением 0.
- Создает графическое окно с координатами (-10, 10)-(10, -10).
- Используя цикл, проверяет каждую комбинацию из трех вершин на возможность образования треугольника.
- Если треугольник можно образовать, то выводит его на экран с помощью функции LINE.
- Переменная z0 используется для отслеживания предыдущей вершины, а zz - для отслеживания следующей вершины, которую необходимо проверить.
- Цикл заканчивается, когда все возможные комбинации вершин были проверены.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д