Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Лабораторная работа

Ответить
Настройки темы
C/C++ - Лабораторная работа

Новый участник


Сообщения: 15
Благодарности: 0

Профиль | Цитировать


Изменения
Автор: ustrel
Дата: 04-11-2008
A и B – середины двух несмежных боковых ребер правильной шестиугольной призмы. Найти на плоскости нижнего основания призмы все такие точки, что прямые MA и MB образуют равные углы с плоскостью нижнего основания призмы.

Отправлено: 23:39, 23-03-2003

 

Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


Если я правильно понял - точнее правильно нарисовал, это плоскость, делящая призму пополам. Все точки, лежащие на ней, будут удовлетворять условию равных углов, а при пересечении с нижней плоскостью решение сужается до прямой. Но пока непонятно, при чем тут программирование.

[s]Исправлено: Crew, 0:40 24-03-2003[/s]

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 00:38, 24-03-2003 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Студент


Сообщения: 445
Благодарности: 8

Профиль | Отправить PM | Цитировать


Crew
ПРограммирование тут при том, что запрограммировать решение геометрической задачи, которое понятно человеку, не всегда легко. Это называется "вычислительная геометрия". Попробуй например написать программу, находящую точки пересечения окружностей (или хотя бы даже отрезков). ;-)

ustrel
Как задана призма и точки A и B? В каком виде нужно задавать искомое множество?

-------
*Origin: Lots of people talking, few of them - no... (2:5020/****.**)


Отправлено: 01:17, 24-03-2003 | #3


Студент


Сообщения: 445
Благодарности: 8

Профиль | Отправить PM | Цитировать


Ну раз это дословное условие, то видимо тебе самому предоставляется выбор.

Я бы сделал так:
сначала на экран выводится правильная шестиугольная призма, причём основания в плоскостях, параллельных XY и отстоят от z=0 на одинаковые расстояния. Затем запрашиваются с клавиатуры номера рёбер, на которых брать точки A и B. Ну дальше ясно - строится уравнение нужной прямой, выводится прямая.

Внутри программы есть смысл сделать функцию проецирования, которая сначала поворачивает координатную систему в двух плоскостях на заданные углы, а потом возвращает координаты проекции на экран (я понятно изъясняюсь? ;-) ).

-------
*Origin: Lots of people talking, few of them - no... (2:5020/****.**)


Отправлено: 19:02, 24-03-2003 | #4


Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата:
Ну дальше ясно - строится уравнение нужной прямой, выводится прямая.
А общий вид уравнения в таких задчах задается изначально?

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 22:06, 24-03-2003 | #5


Студент


Сообщения: 445
Благодарности: 8

Профиль | Отправить 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')

Получив две точки и немного подумав приходим к выводу, что параметрические уравнение не нужно для рисования этого безобразия на экране, т.к. прямая проэцируется в прямую. Проэцируем найденные точки, проводим через них прямую.

-------
*Origin: Lots of people talking, few of them - no... (2:5020/****.**)


Отправлено: 01:45, 26-03-2003 | #6


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


ustrel
Я бы сделал всё это несколько проще. Главное здесь, что точки - середины боковых рёбер! Следовательно прямая, соединяющая их, параллельна онованию. Перпендикуляр, опущенный из середины отрезка этой прямой, даёт перую искомую точку. Эта точка и две исходные образуют равнобедренный треугольник, являющийся частью плоскости, проходящей через два боковых ребра. Осталось на основании через полученную первую точку провести перпендикуляр к упомянутой выше плоскости - это и есть искомое место точек!

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 06:14, 26-03-2003 | #7


Студент


Сообщения: 445
Благодарности: 8

Профиль | Отправить PM | Цитировать


shurikan
Только опять же, нужно проводить перпендикуляр к плоскости...
Уравнение плоскости построить всё-же прийдётся. А так вобщем да - в такой системе координат таким способом вычислений поменьше получается.

-------
*Origin: Lots of people talking, few of them - no... (2:5020/****.**)


Отправлено: 10:50, 26-03-2003 | #8


Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


noname00.pas
А вот и нет. Про высоту призмы ничего не сказано. Мы можем представить себе, что она вырождена, т.е. это плоский правильный шестиугольник. Наши точки - суть вершины его. Тогда мы имеем (исходя из условия) два различных варианта: точки напротив друг друга и точка-вершина-точка. (Нарисовать бы...). В первом случае мы имеем две противоположные стороны шестиугольника, не содержащие наши точки - соеддиняем середины этих сторон отрезком! Во втором случае соединяем вершину между точками и противоположную отрезком! Эти отрезки и будут искомыми ГМТ. Вычислить координаты середины отображённого на экран отрезка - просто, а про вершины и говорить нечего (и так известны)

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 15:23, 27-03-2003 | #9


Студент


Сообщения: 445
Благодарности: 8

Профиль | Отправить PM | Цитировать


shurikan
Ну да, а ещё они могут быть на соседних рёбрах. Итого 3 случая. По-моему проще в общем виде эту задачу решать ;-)

-------
*Origin: Lots of people talking, few of them - no... (2:5020/****.**)


Отправлено: 18:28, 27-03-2003 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Лабораторная работа

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Работа с 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




 
Переход