КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Dim x(nt), y(nt)
1 2 4 3 1 3 2 4 1 4 3 2 16 1 4 2 3 18 1 2 4 3 14 1 3 2 4 18 1 2 4 3 14 1 2 3 4 16 4 3 4 0 0 0 Data 4, 3 Data 4, 0 Data 0, 3 Data 0, 0 Data 1, 4, 3, 2 Data 1, 4, 2, 3 Data 1, 2, 4, 3 Data 1, 3, 2, 4 Data 1, 2, 4, 3 Data 1, 2, 3, 4 tchks: 'координаты точек
Результаты выполнения на ЭВМ приведенной программы: координаты точек:
маршруты: длина: максимальный маршрут: длина =18 минимальный маршрут: длина = 14
Четвертую задачу можно отнести к геометрическим задачам, решение которых опирается на некоторые геометрические законы и свойства. Эта задача наиболее сложная среди рассмотренных задач из-за необходимости привлечения определенных математических знаний для организации ее решения. Задача 4. «Ломаная». Найти все точки самопересечения разноцветной замкнутой линии, заданной на плоскости координатами своих вершин в порядке обхода ломаной. Данные о ломаной представляются таблицей:
Особенность этой задачи - большое число частных случаев, связанных с возможным вырождением или наложением отрезков ломанной линии. Именно эти ситуации и составляют содержание тестов, на которых большинство программ дают неправильные результаты. Приведем проверочные тесты: Tecт1. (Основной случай)
Правильные результаты: точки пересечения 0.5 0.5
Тест 2. (Основной случай)
Правильные результаты: точки пересечения: отсутствуют
Тест3. (Наложение вершины)
Правильные результаты: точки пересечения 0.5 0
Тест4. (Наложение ребра)
Правильные результаты: отрезок пересечения: [0.2, 0] - [0.8, 0] Для систематического конструирования алгоритмов и программы необходима разработка сценария диалога и описание метода решения поставленной геометрической задачи. Сценарий точек: <n> координаты точек: <k>: <x> <у> …….. точки пересечения: отрезок: <k> - <k+l> * отрезок: <1> - <1+1> точка: <х> <у> ……… отсутствуют
Метод решения данной задачи может быть основан на вычислении точек пересечения отрезков (х1, у1) - (x2, у2) и (х3, y3) - (х4, y4) как точек пересечения линий, проходящих через заданные отрезки, с помощью системы уравнений:
(y2 – y1)×(x – x1) - (x2 – x1)×(y – у1) = 0; (у4 – у3)×(x – x3) - (x4 – x3)×(у – y3) = 0.
Решение этих уравнений может быть проведено вычислением определителей D, Dx, Dy приведенной системы уравнений:
(у2 – у1)×х - (х2 – х1)×у = (у2 – y1)×х1 - (x2 – x1)×y1; (у4 – y3)×х - (х4 – х3) ×у = (у4 – у3)×х3- (x4 – x3)×y3,
для которой будет справедлив следующий набор расчетных формул:
х = Dx/D; у = Dy/D; D = (у2 - у1)×(х4 - x3) - (x2 - x1)×(y4 - y3); Dx = [(y2 - yl)×xl - (х2 – x1)×y1] - (x4 – х3) - (x2 – x1)×[(y4 – y3)×x3 - (х4 – х3)×y3]; Dy = (у2 - у1)×[(у4 – у3)×х3 - (x4 - x3)×у3] - [(у2 – y1)×x1 - (х2 – x1)×y1]×(y4 – y3).
Факт пересечения пар отрезков может быть установлен из этих же уравнений подстановкой в правые части координат точек альтернативного отрезка и сравнением значений этих выражений. А именно, отрезок [(х3, у3) - (х4, у4)] пересекает линию, проходящую через отрезок [(x1, y1) - (х2, у2)], если эти выражения имеют разные знаки:
(у2 - у1)×(х3 – x1) - (х2 – х1)×(y3 – у1) ´ (у2 - у1)×(х4 – x1) - (х2 – x1)×(y4 – y1) £ 0.
Соответственно, отрезок [(х1, у1) - (х2, у2)] пересекает линию, проходящую через отрезок [(х3, у3) - (х4, у4)], если аналогичные выражения имеют разные знаки:
(у4 – у3)×(х1 – х3) - (х4 – х3)×(у1 – у3)´(у4 – у3)×(х2 – х3) - (х4 – х3)×(у2 – у3) £ 0.
И наконец, самый тонкий момент - это частные случаи, когда отрезки ломаной оказываются на одной прямой линии. В этом случае отрезки либо вообще не пересекаются, либо имеют общую часть, которую можно определить из взаимного расположения отрезков на прямой. В последнем случае общая часть отрезков находится из взаиморасположения отрезков [(х1, у1) - (х2, у2)] и [(х3, у3) - (х4, у4)] на прямой. В данной ситуации взаиморасположение вершин отрезков можно выяснить, вычислив взаиморасположение между ними на прямой относительно отрезка [(х1, у1) - (х2, у2)] по следующим формулам:
d1 = 0; d2 = (х2 – х1)×(х2 – х1) + (у2 – у1)×(у2 - 1); d3 = (х3 – х1)×(x2 – х1) + (у3 - у1)×(у2 - 1); d4 = (х4 – х1)×(х2 – х1) + (у4 – y1)×(y2 - 1).
Если d2 < min (d3, d4) или max (d3, d4) < 0, то отрезки не пересекаются. В противном случае необходимо выделить и отбросить две крайние точки, и тогда оставшиеся две точки зададут общую часть этих отрезков. Опираясь на эти математические факты можно приступить к составлению алгоритмов и программы. Приведем программу, в которой установлено максимальное число точек nt = 200. Реальное число точек устанавливается при вводе исходных данных из перечня операторов data, записанных в конце текста программы. ¢ самопересечение ломаной nt = 200 gosub wod 'ввод данных ? «точки пересечения:» np = 0 'число пересечении for k = 1 to nt - 1 xl = x(k): yl = y(k) x2 = x(k + I): y2 = y(k + 1) for 1 = k + 1 to nt - 1 x3 = x(I): y3 = y(I) х4 = x(I + 1): y4 = y(I + 1) gosub pint 'пересечение
Дата добавления: 2014-11-25; Просмотров: 347; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |