Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Zyava



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

//файл Vector3D.cpp
//---------------------------------------------------------------------------
 
#include "Vector3D.h"
#include <stdio.h>
 
//---------------------------------------------------------------------------
 
#pragma package(smart_init)
 
Vector3D::Vector3D()
{
        x = y = z = 0;
}
//========================================================================
Vector3D::Vector3D(float v)
{
        x = y = z = v;
}
//========================================================================
Vector3D::Vector3D(float px, float py, float pz)
{
        x=px;
        y=py;
        z=pz;
}
//========================================================================
Vector3D::Vector3D(const Vector3D& v)
{
        x=v.x;
        y=v.y;
        z=v.z;
}
//========================================================================
Vector3D& Vector3D::operator = (const Vector3D& v)
{
        x=v.x;
        y=v.y;
        z=v.z;
        return *this;
}
//========================================================================
Vector3D& Vector3D::operator = (float f)
{
        x = y = z = f;
        return *this;
}
//========================================================================
Vector3D Vector3D::operator + () const
{
        return *this;
}
//========================================================================
// оператор инвертирования всех координат вектора
Vector3D Vector3D::operator - () const
{
        Vector3D v;
        v.x=-x;
        v.y=-y;
        v.z=-z;
        return v;
}
//========================================================================
// оператор увеличения координат одного вектора на координаты другого вектора
Vector3D& Vector3D::operator +=(const Vector3D& v)
{
        x+=v.x;
        y+=v.y;
        z+=v.z;
        return *this;
}
//========================================================================
// оператор уменьшения координат одного вектора из координаты другого вектора
Vector3D& Vector3D::operator -=(const Vector3D& v)
{
        x-=v.x;
        y-=v.y;
        z-=v.z;
        return *this;
}
//========================================================================
// оператор умножения координат одного вектра на координаты другого вектора
Vector3D& Vector3D::operator *=(const Vector3D& v)
{
        x*=v.x;
        y*=v.y;
        z*=v.z;
        return *this;
}
//========================================================================
// оператор умножения координат вектора на число
Vector3D& Vector3D::operator *=(float f)
{
        x*=f;
        y*=f;
        z*=f;
        return *this;
}
//========================================================================
// оператор деления координат вектора на число
Vector3D& Vector3D::operator /=(float f)
{
        x/=f;
        y/=f;
        z/=f;
        return *this;
}
//========================================================================
float& Vector3D::operator [] (int index)
{
        return *(index + &x);
}
//========================================================================
int Vector3D::operator == (const Vector3D& v)
{
        return x==v.x&&y==v.y&&z==v.z;
}
//========================================================================
int Vector3D::operator != (const Vector3D& v)
{
        return x!=v.x||y!=v.y||z!=v.z;
}
//========================================================================
int Vector3D::operator < (float v)
{
        return x < v && y < v && z < v;
}
//========================================================================
int Vector3D::operator > (float v)
{
        return x > v && y > v && z > v;
}
//========================================================================
int Vector3D::operator <= (float v)
{
        return x <= v && y <= v && z <= v;
}
//========================================================================
int Vector3D::operator >= (float v)
{
        return x >= v && y >= v && z >= v;
}
//========================================================================
// вычисление длины вектора
float Vector3D::length ()
{
        return (float) sqrt(x*x + y*y + z*z);
}
//========================================================================
// оператор вычисления длины вектора
float Vector3D::operator ! ()
{
        return (float) sqrt(x*x + y*y + z*z);
}
//========================================================================
// оператор сложения векторов
Vector3D operator + (const Vector3D& u, const Vector3D& v)
{
        return Vector3D (u.x+v.x,u.y+v.y,u.z+v.z);
}
//========================================================================
// оператор вычитания векторов
Vector3D operator - (const Vector3D& u, const Vector3D& v)
{
        return Vector3D (u.x-v.x,u.y-v.y,u.z-v.z);
}
//========================================================================
// оператор перемножения векторов
Vector3D operator * (const Vector3D& u, const Vector3D& v)
{
        return Vector3D (u.x*v.x,u.y*v.y,u.z*v.z);
}
//========================================================================
// оператор умножения вектора на число
Vector3D operator * (const Vector3D& v, float a)
{
        return Vector3D (v.x*a,v.y*a,v.z*a);
}
//========================================================================
// оператор умножения числа на вектор
Vector3D operator * (float a, const Vector3D& v)
{
        return Vector3D (v.x*a,v.y*a,v.z*a);
}
//========================================================================
// оператор деления вектора на число
Vector3D operator / (const Vector3D& v, float a)
{
        Vector3D t;
        t.x=v.x/a;
        t.y=v.y/a;
        t.z=v.z/a;
        return t;
}
//========================================================================
// оператор деления векторов
Vector3D operator / (const Vector3D& u, const Vector3D& v)
{
        Vector3D t;
        t.x=u.x / v.x;
        t.y=u.y / v.y;
        t.z=u.z / v.z;
        return t;
}
 
//========================================================================
// оператор скалярного произведения векторов
float operator & (const Vector3D& u, const Vector3D& v)
{
        return (u.x*v.x+u.y*v.y+u.z*v.z);
}
//========================================================================
// векторное произведение
Vector3D operator ^ (const Vector3D& u, const Vector3D& v)
{
        return Vector3D (u.y*v.z-u.z*v.y,u.z*v.x-u.x*v.z,u.x*v.y-u.y*v.x);
}
//========================================================================
// оператор вывода вектора в файл
ofstream&  operator << (ofstream& f, Vector3D& v)
{
        f<<"[Vector3D]"<<endl;
        f<<";_x"<<endl;
        f<<v.x<<endl;
        f<<";_y"<<endl;
        f<<v.y<<endl;
        f<<";_z"<<endl;
        f<<v.z<<endl;
        f<<"[/Vector3D]"<<endl;
        return f;
}
//========================================================================
// оператор ввода вектора из файла
ifstream&  operator >> (ifstream& f, Vector3D& v)
{
        char s[256];
        f>>s;
        f>>s;
        f>>v.x;
        f>>s;
        f>>v.y;
        f>>s;
        f>>v.z;
        f>>s;
 
        return f;
}
//========================================================================
// угол между 3d - векторами в градусах
float vectorAngle    (Vector3D v, Vector3D w)
{
        //скалярное произведение(v,w) = length(v)*length(w)*cos(angle) ==>
        //angle = acos(скалярное произведение(v,w)/(length(v)*length(w)))
        if((v.length()==0)||(w.length()==0))
        {
                return 0;
        }
        else
        {
                return acos( (v&w)/( v.length()*w.length() ) )/M_PI*180;
        }
}
 
//========================================================================
// Нормализация вектора
void Vector3D::normalize()
{
    float l = length();
    if(l != 0)
    {
        x /= l;
        y /= l;
        z /= l;
    }
}
//========================================================================
Vector3D normalize(Vector3D& v)
{
    v.normalize();
    return v;
}
//========================================================================
float Vector3D::distance(Vector3D v)
{
    return sqrt((v.x - x) * (v.x - x) +
                (v.y - y) * (v.y - y) +
                (v.z - z) * (v.z - z));
}
//========================================================================
float distance(Vector3D v, Vector3D w)
{
    return sqrt((v.x - w.x) * (v.x - w.x) +
                (v.y - w.y) * (v.y - w.y) +
                (v.z - w.z) * (v.z - w.z));
}
//========================================================================
void Vector3D::CreateVector(Vector3D endPnt)
{
    x = endPnt.x - x;
    y = endPnt.y - y;
    z = endPnt.z - z;
}
//========================================================================
 

Всего записей: 324 | Зарегистр. 04-05-2006 | Отправлено: 02:06 25-02-2007
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru