
Другие языки программирования и технологии
Помогите написать программу на платформа Pascal ABC

На самом деле, задача простая…
Сводится к векторному произведению.
Но перебивать сумму предыдущего отвечающего не буду ;–)
Сводится к векторному произведению.
Но перебивать сумму предыдущего отвечающего не буду ;–)
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. не математик, так что в терминологии могут быть пробелы.


где:
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 ......
Yn = Xb - Xa
опечатался
опечатался
Похожие вопросы
- Помогите написать программу на языке Pascal ABC
- Помогите написать программу на Free pascal
- Помогите написать программу в Pascal abc net
- Помогите написать программы по Pascal ABC
- Помогите написать программу на уровне 9 класса в Pascal.ABC
- Люди помогите написать программы для Pascal очень срочно и очень нужно
- Помогите написать программу в PASCAL!!!
- помогите написать программу pascal
- Помогите пожалуйста решить задачу в Pascal ABC
- Помогите с составлением задач в Pascal ABC!!Срочно!