Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
#1

Многоугольник в пространстве - C++

18.03.2013, 11:06. Просмотров 1908. Ответов 25
Метки нет (Все метки)

Добрый день!

Не могли бы вы мне помочь? У меня такая задача. Даны две точки A и B в трёхмерном пространстве, которые образуют вектор. А еще дан отрезок R. Как в трехмерном пространстве построить n-угольник, который лежит в плоскости, перпендикулярной вектору AB и который вписан в окружность радиусом R (например, на картинке построен шестиугольник)? Т.е. надо просто получить координаты (в массиве, например).


Я не могу представить, хотя бы как это вообще реализовать? Какие математические знания я забыл/не знаю/не учел? В какую сторону копать? Как математически можно получить точки? остальную реализацию я сам сделаю.

Заранее спасибо!
0
Изображения
 
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 11:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Многоугольник в пространстве (C++):

Ввести количество точек, получить многоугольник, закрасить многоугольник построчно. - C++
Здравствуйте, есть программа написанная на С++ Builder, (см архив) у меня почему то она виснет( Суть программы такова сперва нужно ввести...

Выпуклый многоугольник - C++
Есть массив точек, нужно определить выпуклый ли это многоугольник. Я так понимаю что нужно посчитать каждый угол. Может быть можно другим...

Выпуклый многоугольник - C++
Вот программа: #include <iostream> #include <cmath> #define size 100000 using namespace std; class point {

Повернуть многоугольник - C++
Есть некоторый многоугольник с 4-5 точками. Нужно повернуть его вокруг своей оси на определенный градус. Подскажите формулу как высчитать...

Динамический многоугольник - C++
динамический многоугольник Характеризуется количеством вершин . Поддерживает специфические методы : • чтение и запись координат...

Соединить рёбра в многоугольник - C++
Здравствуйте. Как соеденить рёбра в многоугольник без внутренних пересечений? Известна только часть рёбер. К тем, что известны надо...

25
HighPredator
5541 / 1854 / 346
Регистрация: 10.12.2010
Сообщений: 5,468
Записей в блоге: 2
18.03.2013, 11:23 #2
Если нужен не правильный многоугольник, то пишете уравнение окружности и берете с него сколько надо точек.
Если нужен правильный, то для вычисления координат вершин можно использовать уравнения. Все они есть в той же википедии.
0
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
18.03.2013, 11:38  [ТС] #3
Мне нужен именно правильный многоугольник. В Википедии-то есть уравнения, но там только две координаты! В этом-то вся и проблема, что я не знаю, как третью припихнуть Ведь надо "нарисовать" многоугольник в плоскости, перпендикулярной вектору, а как получить эту плоскость?
0
IrineK
Заблокирован
18.03.2013, 12:09 #4
Если есть вектор n = (A,B,C)
то любая плоскость вида Ax+By+Cz+D = 0 - перпендикулярна этому вектору.
0
palva
2747 / 1848 / 266
Регистрация: 08.06.2007
Сообщений: 7,028
Записей в блоге: 4
18.03.2013, 12:19 #5
Наверно проще построить новую систему координат, чтобы плоскость Ox'y' была перпендикулярна вектору AB. Тогда координаты вершин многоугольника легко написать, типа (1,0,0), (cos пи/3, sin пи/3, 0) и т. д. Потом умножить эти векторы на матрицу перехода и получить координаты точек в старой системе координат.
1
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
18.03.2013, 12:24  [ТС] #6
Построить в плоскости многоугольник - с этим проблем нет. Т.е. задача сводится к повороту относительно некоторого вектора, правильно я понимаю?
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.03.2013, 12:25 #7
крути один конец отрезка вокруг вектора каждый раз на http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{360^0}{n} и ни каких гвоздёв.
0
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
18.03.2013, 12:27  [ТС] #8
Цитата Сообщение от taras atavin Посмотреть сообщение
крути один конец отрезка вокруг вектора каждый раз на и ни каких гвоздёв.
Хорошо, а откуда начальный вектор взять? т.е. который мы будем крутить?
0
palva
2747 / 1848 / 266
Регистрация: 08.06.2007
Сообщений: 7,028
Записей в блоге: 4
18.03.2013, 12:29 #9
Цитата Сообщение от Asker Посмотреть сообщение
Т.е. задача сводится к повороту относительно некоторого вектора, правильно я понимаю?
Я предложил другое решение. Но вы понимаете правильно. Только вам придется вычислить матрицу поворота вокруг вектора AB. Это непростая задача.

Добавлено через 1 минуту
Цитата Сообщение от Asker Посмотреть сообщение
Хорошо, а откуда начальный вектор взять? т.е. который мы будем крутить?
Взять любой вектор, который перпендикулярен AB (имеет с ним нулевое скалярное произведение) и домножить его на множитель так, чтобы его длина стала равной R.
1
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
18.03.2013, 12:34  [ТС] #10
Цитата Сообщение от palva Посмотреть сообщение
Взять любой вектор, который перпендикулярен AB (имеет с ним нулевое скалярное произведение) и домножить его на множитель так, чтобы его длина стала равной R.
А как это можно сделать?
0
palva
2747 / 1848 / 266
Регистрация: 08.06.2007
Сообщений: 7,028
Записей в блоге: 4
18.03.2013, 12:38 #11
Цитата Сообщение от Asker Посмотреть сообщение
А как это можно сделать?
А я разве не написал, как? Найти какое-нибудь решение уравнения
http://www.cyberforum.ru/cgi-bin/latex.cgi?AB_x x+AB_y y+AB_z z=0
1
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
18.03.2013, 12:38  [ТС] #12
Не так вопрос поставил тут почитал, понял, вопрос стоит так: допустим, я получил вектор, коллинеарный нужному (т.е. который будем вращать), мне, но он имеет длину, не равную R. Как домножить этот вектор и получить координаты коллинеарного вектора с длиной R?
0
taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
18.03.2013, 12:40 #13
колинеарный - это параллельный. на 1 с любым знаком. но тебе нужен копланарный.
0
palva
2747 / 1848 / 266
Регистрация: 08.06.2007
Сообщений: 7,028
Записей в блоге: 4
18.03.2013, 12:41 #14
Цитата Сообщение от Asker Посмотреть сообщение
Как домножить этот вектор и получить координаты коллинеарного вектора с длиной R?
Длина вектора равна корню квадратному из суммы квадратов его компонент. То есть все компоненты вектора нужно будет разделить на длину вектора и умножить на R
1
Asker
115 / 103 / 11
Регистрация: 18.12.2010
Сообщений: 378
18.03.2013, 12:49  [ТС] #15
Последний вопрос: как повернуть один вектор вокруг другого вектора? Через матрицы?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2013, 12:49
Привет! Вот еще темы с ответами:

Многоугольник. Переопределение оператора += - C++
Здравствуйте. Имеется класс Многоугольник. Преподаватель выдал доп.задания, одно из них переопределить += для добавления вершины (с...

Описать класс «Многоугольник» - C++
Описать класс «Многоугольник», имеющий закрытые атрибуты для хранения информации о количестве вершин и длине стороны, а также общедоступные...

задача выпуклый многоугольник - C++
выпуклый многоугольник. многоугольник задан координатами своих вершин при их последовательном обходе. Составить подпрограмму,...

Определить выпуклый ли многоугольник. - C++
Задан многоугольник координатами в порядке обхода. Определить выпуклый ли он ? как сделать иначе не проверяя угол ? Хочется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
18.03.2013, 12:49
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru