|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Лабораторная работа |
|
|
C/C++ - Лабораторная работа
|
Новый участник Сообщения: 15 |
A и B – середины двух несмежных боковых ребер правильной шестиугольной призмы. Найти на плоскости нижнего основания призмы все такие точки, что прямые MA и MB образуют равные углы с плоскостью нижнего основания призмы.
|
|
Отправлено: 23:39, 23-03-2003 |
Старожил Сообщения: 163
|
Профиль | Отправить PM | Цитировать Если я правильно понял - точнее правильно нарисовал, это плоскость, делящая призму пополам. Все точки, лежащие на ней, будут удовлетворять условию равных углов, а при пересечении с нижней плоскостью решение сужается до прямой. Но пока непонятно, при чем тут программирование.
[s]Исправлено: Crew, 0:40 24-03-2003[/s] |
------- Отправлено: 00:38, 24-03-2003 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Студент Сообщения: 445
|
Профиль | Отправить PM | Цитировать Crew
ПРограммирование тут при том, что запрограммировать решение геометрической задачи, которое понятно человеку, не всегда легко. Это называется "вычислительная геометрия". Попробуй например написать программу, находящую точки пересечения окружностей (или хотя бы даже отрезков). ;-) ustrel Как задана призма и точки A и B? В каком виде нужно задавать искомое множество? |
------- Отправлено: 01:17, 24-03-2003 | #3 |
Студент Сообщения: 445
|
Профиль | Отправить PM | Цитировать Ну раз это дословное условие, то видимо тебе самому предоставляется выбор.
Я бы сделал так: сначала на экран выводится правильная шестиугольная призма, причём основания в плоскостях, параллельных XY и отстоят от z=0 на одинаковые расстояния. Затем запрашиваются с клавиатуры номера рёбер, на которых брать точки A и B. Ну дальше ясно - строится уравнение нужной прямой, выводится прямая. Внутри программы есть смысл сделать функцию проецирования, которая сначала поворачивает координатную систему в двух плоскостях на заданные углы, а потом возвращает координаты проекции на экран (я понятно изъясняюсь? ;-) ). |
------- Отправлено: 19:02, 24-03-2003 | #4 |
Старожил Сообщения: 163
|
Профиль | Отправить PM | Цитировать Цитата:
|
||
------- Отправлено: 22:06, 24-03-2003 | #5 |
Студент Сообщения: 445
|
Профиль | Отправить PM | Цитировать Crew
Общий вид уравнения выбирает программист ;-) ustrel Прямая будет линией пересечения плоскости основания с плоскостью точек, равноудалённых от A и B. Уравнение первой из них строится по трём точкам основания. Уравнение второй получить тоже просто: пусть A имеет координаты (x1, y1, z1), B имеет координаты (x2, y2, z2). Тогда вектор с координатами (x2-x1, y2-y1, z2-z1) будет вектором нормали исходной плоскости, значит если плоскость заданауравнением Ax+By+Cz+D=0, то A = x2-x1, B = y2-y1, c = z2-z1. Число D находится из уравнения, которое получается, если учесть, что плоскость проходит через середину отрезка AB. А именно: D = -(A(x1+x2)+B(y1+y2)+C(z1+z2))/2. Хочу сразу заметить, что если была выбрана такая система координат, как я писал выше, то уравнение плоскости основания имеет вид z = C', для некоторого C', а уравнение плоскости, точки которой равноудалены от A и B имеет вид Ax+By+D = 0. Исходя из этого чтобы перейти к параметрическому (или векторному) уравнению прямой нужно фактически найти две различные точки прямой на плоскости. Тут возможны два случая: 1) B=0. Тогда x = -D/A. В этом случае берём две любые точки вида (-D/A, X, C'), для различных значений X. 2) B <> 0. Тогда y = -(D+Ax)/B. Подставляем два разных значения x, получаем две точки. (помним, что z = C') Получив две точки и немного подумав приходим к выводу, что параметрические уравнение не нужно для рисования этого безобразия на экране, т.к. прямая проэцируется в прямую. Проэцируем найденные точки, проводим через них прямую. |
------- Отправлено: 01:45, 26-03-2003 | #6 |
Старожил Сообщения: 240
|
Профиль | Отправить PM | Цитировать ustrel
Я бы сделал всё это несколько проще. Главное здесь, что точки - середины боковых рёбер! Следовательно прямая, соединяющая их, параллельна онованию. Перпендикуляр, опущенный из середины отрезка этой прямой, даёт перую искомую точку. Эта точка и две исходные образуют равнобедренный треугольник, являющийся частью плоскости, проходящей через два боковых ребра. Осталось на основании через полученную первую точку провести перпендикуляр к упомянутой выше плоскости - это и есть искомое место точек! |
------- Отправлено: 06:14, 26-03-2003 | #7 |
Студент Сообщения: 445
|
Профиль | Отправить PM | Цитировать shurikan
Только опять же, нужно проводить перпендикуляр к плоскости... Уравнение плоскости построить всё-же прийдётся. А так вобщем да - в такой системе координат таким способом вычислений поменьше получается. |
------- Отправлено: 10:50, 26-03-2003 | #8 |
Старожил Сообщения: 240
|
Профиль | Отправить PM | Цитировать noname00.pas
А вот и нет. Про высоту призмы ничего не сказано. Мы можем представить себе, что она вырождена, т.е. это плоский правильный шестиугольник. Наши точки - суть вершины его. Тогда мы имеем (исходя из условия) два различных варианта: точки напротив друг друга и точка-вершина-точка. (Нарисовать бы...). В первом случае мы имеем две противоположные стороны шестиугольника, не содержащие наши точки - соеддиняем середины этих сторон отрезком! Во втором случае соединяем вершину между точками и противоположную отрезком! Эти отрезки и будут искомыми ГМТ. Вычислить координаты середины отображённого на экран отрезка - просто, а про вершины и говорить нечего (и так известны) |
------- Отправлено: 15:23, 27-03-2003 | #9 |
Студент Сообщения: 445
|
Профиль | Отправить PM | Цитировать shurikan
Ну да, а ещё они могут быть на соседних рёбрах. Итого 3 случая. По-моему проще в общем виде эту задачу решать ;-) |
------- Отправлено: 18:28, 27-03-2003 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Работа с flash. | repikman | AutoIt | 4 | 03-06-2009 15:33 | |
C/C++ - [решено] Лабораторная. Работа с массивами | Artem-Samsung | Программирование и базы данных | 6 | 01-06-2009 21:30 | |
Работа БП | Surround | Хочу все знать | 5 | 05-03-2006 21:40 | |
Работа ХР с CD | LamerOK | Microsoft Windows 2000/XP | 8 | 17-04-2004 23:51 | |
Работа с сетью | Guest | Программирование и базы данных | 3 | 04-12-2002 15:19 |
|