Другие языки программирования и технологии

Помогите написать программу на платформа Pascal ABC

На самом деле, задача простая…
Сводится к векторному произведению.

Но перебивать сумму предыдущего отвечающего не буду ;–)
Владимир Махватов
Владимир Махватов
71 590
Лучший ответ
3000 рублей
Основания? Сложная задача, у меня аж моск вскипел.

Добро пожаловать в реальный мир, деточка. Здесь принято ПЛАТИТЬ за ту работу которую не можешь сделать сам... И платить придется ТЕБЕ, а не папке с мамкой...
Serega Marochko-Патап диктуй номер киви)
для каждого ребра многоугольника, если (Ya - Yb) * (Xp - Xa) + (Xb - Xa) * (Yp - Ya) > 0, значит ребро видно
где:
p - позиция наблюдателя
a - начало ребра
b - конец ребра

если таким образом окажется, что ни одно ребро не видно - наблюдатель внутри многоугольника, значит на самом деле видны все ребра.

длины ребер считаем по теореме пифагора.

подробнее:

для каждого ребра:
находим нормаль
Xn = Ya - Yb
Yn = Xb - Ya
так как точки заданы в порядке обхода по часовой стрелке, нормали будут направлены "наружу" многоугольника.

находим скалярное произведение вектора нормали и вектора направленного от любой точки ребра к наблюдателю.
Xv = Xp - Xa
Yv = Yp - Ya

n∙v = Xn*Xv + Yn*Yv

результат будет равен произведению длин векторов на косинус угла между ними.
длины ребер всегда неотрицательны, следовательно знак произведения будет равен знаку косинуса угла:
если n∙v > 0, то угол меньше 90 градусов и ребро видно, прибавляем его длину к видимому периметру.

ps. не математик, так что в терминологии могут быть пробелы.
Tilek ......
Tilek ......
7 029
Tilek ...... Yn = Xb - Xa
опечатался