ďťż

Ł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
  •