Ĺadny brzuch
Niebardzo wiem, jak zdefiniować typ danych Wektor przy pomocy konstrukcji typedef oraz zwykłego wektora std::vector< double>? Proszę o pomoc!
Dzięki
Aga
Chodzi ci o vector jako kontener czy vector jako klase robiaca funkcje matematyczne do wektorow ??
FreeBSD r0x'uje
GG: 2175556
www.cepa.end.pl
FreeBSD cepa.gskgonet.com.pl 5.0-RELEASE FreeBSD 5.0-RELEASE #0: Fri Apr 23 22:28:52 CEST 2004 cepa@cepa.gskgonet.com.pl:/usr/src/sys/i386/compile/JAJKO i386
Mam już napisaną klasę macierzy i muszę do niej właśnie takie "coś" dołączyć.
Aga
vector.h:
#ifndef __VECTOR_H
#define __VECTOR_H
#include <math.h>
typedef float scalar_t; // skalar
class CVector
{
public:
scalar_t x;
scalar_t y;
scalar_t z; // składowe x,y,z
public:
// konstruktor
CVector(scalar_t a = 0, scalar_t b = 0, scalar_t c = 0) : x(a), y(B), z© {}
CVector(const CVector &vec) : x(vec.x), y(vec.y), z(vec.z) {}
// podstawienie wektora
const CVector &operator=(const CVector &vec)
{
x = vec.x;
y = vec.y;
z = vec.z;
return *this;
}
// równość wektorów
const bool operator==(const CVector &vec) const
{
return ((x == vec.x) && (y == vec.y) && (z == vec.z));
}
// nierówność wektorów
const bool operator!=(const CVector &vec) const
{
return !(*this == vec);
}
// dodawanie wektorów
const CVector operator+(const CVector &vec) const
{
return CVector(x + vec.x, y + vec.y, z + vec.z);
}
// dodawanie wektorów
const CVector operator+() const
{
return CVector(*this);
}
// dodawanie wektorów
const CVector& operator+=(const CVector& vec)
{ x += vec.x;
y += vec.y;
z += vec.z;
return *this;
}
// odejmowanie wektorów
const CVector operator-(const CVector& vec) const
{
return CVector(x - vec.x, y - vec.y, z - vec.z);
}
// odejmowanie wektorów
const CVector operator-() const
{
return CVector(-x, -y, -z);
}
// odejmowanie wektorów
const CVector &operator-=(const CVector& vec)
{
x -= vec.x;
y -= vec.y;
z -= vec.z;
return *this;
}
// mnożenie wektora przez skalar
const CVector &operator*=(const scalar_t &s)
{
x *= s;
y *= s;
z *= s;
return *this;
}
// dzielenie wektora przez skalar
const CVector &operator/=(const scalar_t &s)
{
const float recip = 1/s; // dla efektywności
x *= recip;
y *= recip;
z *= recip;
return *this;
}
// mnożenie wektora przez skalar
const CVector operator*(const scalar_t &s) const
{
return CVector(x*s, y*s, z*s);
}
// mnożenie wektora przez skalar
friend inline const CVector operator*(const scalar_t &s, const CVector &vec)
{
return vec*s;
}
// dzielenie wektora przez skalar
const CVector operator/(scalar_t s) const
{
s = 1/s;
return CVector(s*x, s*y, s*z);
}
// iloczyn wektorowy
const CVector CrossProduct(const CVector &vec) const
{
return CVector(y*vec.z - z*vec.y, z*vec.x - x*vec.z, x*vec.y - y*vec.x);
}
// iloczyn wektorowy
const CVector operator^(const CVector &vec) const
{
return CVector(y*vec.z - z*vec.y, z*vec.x - x*vec.z, x*vec.y - y*vec.x);
}
// iloczyn skalarny
const scalar_t DotProduct(const CVector &vec) const
{
return x*vec.x + y*vec.x + z*vec.z;
}
// iloczyn skalarny
const scalar_t operator%(const CVector &vec) const
{
return x*vec.x + y*vec.x + z*vec.z;
}
// długość wektora
const scalar_t Length() const
{
return (scalar_t)sqrt((double)(x*x + y*y + z*z));
}
// wektor jednostkowy
const CVector UnitVector() const
{
return (*this) / Length();
}
// normalizacja wektora
void Normalize()
{
(*this) /= Length();
}
// operator modułu (długości) wektora
const scalar_t operator!() const
{
return sqrtf(x*x + y*y + z*z);
}
// zmienia długość wektora
const CVector operator | (const scalar_t length) const
{
return *this * (length / !(*this));
}
// zmienia długość wektora
const CVector& operator |= (const float length)
{
return *this = *this | length;
}
// zwraca kąt, który tworzą wektory
const float inline Angle(const CVector& normal) const
{
return acosf(*this % normal);
}
// tworzy odbicie wektora względem powierzchni zdefiniowanej przez normalną
const CVector inline Reflection(const CVector& normal) const
{
const CVector vec(*this | 1); // normalizuje wektor
return (vec - normal * 2.0 * (vec % normal)) * !*this;
}
};
#endif
Mew
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Dzięki
Aga
Chodzi ci o vector jako kontener czy vector jako klase robiaca funkcje matematyczne do wektorow ??
FreeBSD r0x'uje
GG: 2175556
www.cepa.end.pl
FreeBSD cepa.gskgonet.com.pl 5.0-RELEASE FreeBSD 5.0-RELEASE #0: Fri Apr 23 22:28:52 CEST 2004 cepa@cepa.gskgonet.com.pl:/usr/src/sys/i386/compile/JAJKO i386
Mam już napisaną klasę macierzy i muszę do niej właśnie takie "coś" dołączyć.
Aga
vector.h:
#ifndef __VECTOR_H
#define __VECTOR_H
#include <math.h>
typedef float scalar_t; // skalar
class CVector
{
public:
scalar_t x;
scalar_t y;
scalar_t z; // składowe x,y,z
public:
// konstruktor
CVector(scalar_t a = 0, scalar_t b = 0, scalar_t c = 0) : x(a), y(B), z© {}
CVector(const CVector &vec) : x(vec.x), y(vec.y), z(vec.z) {}
// podstawienie wektora
const CVector &operator=(const CVector &vec)
{
x = vec.x;
y = vec.y;
z = vec.z;
return *this;
}
// równość wektorów
const bool operator==(const CVector &vec) const
{
return ((x == vec.x) && (y == vec.y) && (z == vec.z));
}
// nierówność wektorów
const bool operator!=(const CVector &vec) const
{
return !(*this == vec);
}
// dodawanie wektorów
const CVector operator+(const CVector &vec) const
{
return CVector(x + vec.x, y + vec.y, z + vec.z);
}
// dodawanie wektorów
const CVector operator+() const
{
return CVector(*this);
}
// dodawanie wektorów
const CVector& operator+=(const CVector& vec)
{ x += vec.x;
y += vec.y;
z += vec.z;
return *this;
}
// odejmowanie wektorów
const CVector operator-(const CVector& vec) const
{
return CVector(x - vec.x, y - vec.y, z - vec.z);
}
// odejmowanie wektorów
const CVector operator-() const
{
return CVector(-x, -y, -z);
}
// odejmowanie wektorów
const CVector &operator-=(const CVector& vec)
{
x -= vec.x;
y -= vec.y;
z -= vec.z;
return *this;
}
// mnożenie wektora przez skalar
const CVector &operator*=(const scalar_t &s)
{
x *= s;
y *= s;
z *= s;
return *this;
}
// dzielenie wektora przez skalar
const CVector &operator/=(const scalar_t &s)
{
const float recip = 1/s; // dla efektywności
x *= recip;
y *= recip;
z *= recip;
return *this;
}
// mnożenie wektora przez skalar
const CVector operator*(const scalar_t &s) const
{
return CVector(x*s, y*s, z*s);
}
// mnożenie wektora przez skalar
friend inline const CVector operator*(const scalar_t &s, const CVector &vec)
{
return vec*s;
}
// dzielenie wektora przez skalar
const CVector operator/(scalar_t s) const
{
s = 1/s;
return CVector(s*x, s*y, s*z);
}
// iloczyn wektorowy
const CVector CrossProduct(const CVector &vec) const
{
return CVector(y*vec.z - z*vec.y, z*vec.x - x*vec.z, x*vec.y - y*vec.x);
}
// iloczyn wektorowy
const CVector operator^(const CVector &vec) const
{
return CVector(y*vec.z - z*vec.y, z*vec.x - x*vec.z, x*vec.y - y*vec.x);
}
// iloczyn skalarny
const scalar_t DotProduct(const CVector &vec) const
{
return x*vec.x + y*vec.x + z*vec.z;
}
// iloczyn skalarny
const scalar_t operator%(const CVector &vec) const
{
return x*vec.x + y*vec.x + z*vec.z;
}
// długość wektora
const scalar_t Length() const
{
return (scalar_t)sqrt((double)(x*x + y*y + z*z));
}
// wektor jednostkowy
const CVector UnitVector() const
{
return (*this) / Length();
}
// normalizacja wektora
void Normalize()
{
(*this) /= Length();
}
// operator modułu (długości) wektora
const scalar_t operator!() const
{
return sqrtf(x*x + y*y + z*z);
}
// zmienia długość wektora
const CVector operator | (const scalar_t length) const
{
return *this * (length / !(*this));
}
// zmienia długość wektora
const CVector& operator |= (const float length)
{
return *this = *this | length;
}
// zwraca kąt, który tworzą wektory
const float inline Angle(const CVector& normal) const
{
return acosf(*this % normal);
}
// tworzy odbicie wektora względem powierzchni zdefiniowanej przez normalną
const CVector inline Reflection(const CVector& normal) const
{
const CVector vec(*this | 1); // normalizuje wektor
return (vec - normal * 2.0 * (vec % normal)) * !*this;
}
};
#endif
Mew