![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.06.2010
Сообщений: 40
|
![]()
Задание такое:
Создать класс vector3D, задаваемый тройкой координат. Обязательно должны быть реализованы: сложение и вычитание векторов, скалярное произведение векторов, умножение вектора на скаляр, вычисление длины вектора, сравнение длины векторов, поворот вектора на заданное количество градуссов (целое число от 0 до 360 градусов) вокруг одной из осей относительно центра вектора, операции ввода-вывода. у мня есть 3 операции тока: *.h Код:
*.cpp -реализация класса Код:
*.cpp -использование Код:
Прошу помочь с реализацией дальнейших условий. Зарание Спасибо. Последний раз редактировалось Stilet; 23.09.2010 в 09:28. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 225
|
![]()
std:: зачем каждый раз?(самому интересно)
Дальнейшие условия реализуешь в виде членов-функций класса,а потом в головной процедуре просто вызываешь.А ответы на вопросы как,найдёшь в гугле там есть и математическое описание действий с векторами,и реализованные на языке С действия.
За помощь: Нажмите на весы слева от сообщения!
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 28.06.2010
Сообщений: 40
|
![]()
Сможете дать коментарии по данной программме???
Объясеить её. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 10.06.2010
Сообщений: 225
|
![]()
так это не твоё?
![]() завтра,сейчас занят.
За помощь: Нажмите на весы слева от сообщения!
|
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 25.09.2010
Сообщений: 3
|
![]()
Детали не вспомню, давнон не занимался графикой, но по хорошему - тебе нужен 4-х размерный вектор и матрицы 4х4 для операций... детали в любой книжке - по памяти программирование OpenGL )
|
![]() |
![]() |
![]() |
#6 |
Новичок
Джуниор
Регистрация: 26.09.2010
Сообщений: 2
|
![]()
class Vector3d {
float components[3]; public: void Init(float&,float&,float&); void Init(string&); void Init(Vector3d&); string toString(); Vector3d Add(Vector3d&); Vector3d Sub(Vector3d&); float Dot(Vector3d&); Vector3d Cross(Vector3d&); float Angle(Vector3d&); float Length(); void Normalize(); bool Equ(Vector3d&); float GetX(){return components[0];} float GetY(){return components[1];} float GetZ(){return components[2];} void Read(); friend Vector3d operator+(const Vector3d&, const Vector3d&); friend Vector3d operator-(const Vector3d&, const Vector3d&); }; void Vector3d::Init(float &x, float &y, float &z) { components[0]=x; components[1]=y; components[2]=z; } void Vector3d::Read() { float x,y,z; cout<<"Enter x component: "; cin>>x; cout<<"Enter y component: "; cin>>y; cout<<"Enter z component: "; cin>>z; this->Init(x,y,z); } string Vector3d::toString() { Vector3d temp=*this; string res=""; string digits="0123456789"; for (int i=2; i>=0; i--) { bool neg=(temp.components[i]<0); int k=fmod(abs(temp.components[i]),10); while (abs(k)>1) { k=fmod(abs(temp.components[i]),10); temp.components[i]/=10; res=digits[k]+res; } if (neg) res="-"+res; if (i>0) res=","+res; } return res; } //Сложение векторов Vector3d Vector3d::Add(Vector3d &vec) { Vector3d temp=*this; for (int i=0; i<3; i++) { temp.components[i]+=vec.components[i]; } return temp; } //Вычитание векторов Vector3d Vector3d::Sub(Vector3d &vec) { Vector3d temp=*this; for (int i=0; i<3; i++) { temp.components[i]-=vec.components[i]; } return temp; } //Скалярное произведение float Vector3d::Dot(Vector3d &vec) { Vector3d temp=*this; float res(0); for (int i=0; i<3; i++) { res+=temp.components[i]*vec.components[i]; } return res; } //Угол между векторами float Vector3d::Angle(Vector3d& vec) { Vector3d temp=*this; float l1=temp.Length(); float l2=vec.Length(); if ((l1!=0) && (l2!=0)){ return acos((temp.Dot(vec)/(l1*l2))); } else { return 0; } } //Векторное произведение Vector3d Vector3d::Cross(Vector3d &vec) { Vector3d temp=*this; Vector3d res; res.components[0]=temp.components[1]*vec.components[2]-temp.components[2]*vec.components[1]; res.components[1]=temp.components[2]*vec.components[0]-temp.components[0]*vec.components[2]; res.components[2]=temp.components[0]*vec.components[1]-temp.components[1]*vec.components[0]; return res; } //Длина вектора float Vector3d::Length () { float res(0); for (int i=0; i<3; i++) { res+=this->components[i]*this->components[i]; } return sqrt(res); } //Сравнение векторов (можно расписать до результата 1,0,-1) bool Vector3d::Equ(Vector3d& vec) { return (this->Length()>vec.Length()); } //Нормализация вектора (приведение к единичной длине) void Vector3d::Normalize() { float length=this->Length(); for (int i=0; i<3; i++) { this->components[i]/=length; } } //Перегрузка сложения Vector3d operator+(Vector3d& v1, Vector3d& v2){ Vector3d res=v1; res=res.Add(v2); return res; } //Перегрузка вычитания Vector3d operator-(Vector3d& v1, Vector3d& v2){ Vector3d res=v1; res=res.Sub(v2); return res; } //и т.д Последний раз редактировалось SlavikLi; 26.09.2010 в 04:43. |
![]() |
![]() |
![]() |
#7 |
Новичок
Джуниор
Регистрация: 26.09.2010
Сообщений: 2
|
![]()
По поводу поворота вектора на угол ищи афинные преобразования. Там все делается с помощью матриц 4 на 4, но можно привести к размерности 3 на 3 и будет тебе счастье.
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 28.06.2010
Сообщений: 40
|
![]()
спасибо народ!!!!
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Тема: файлы на С++ | ulkin2007 | Общие вопросы C/C++ | 1 | 26.05.2010 09:33 |
тема | @AмИгО@ | Помощь студентам | 1 | 20.05.2009 20:44 |