mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-03-22 15:05:03 +01:00
Set dp branch as trunk
This commit is contained in:
116
geometry.cpp
Normal file
116
geometry.cpp
Normal file
@@ -0,0 +1,116 @@
|
||||
//---------------------------------------------------------------------------
|
||||
#include <vcl.h>
|
||||
#pragma hdrstop
|
||||
|
||||
#include "Geometry.h"
|
||||
|
||||
inline double __fastcall sqr(double a) { return ( a*a ); };
|
||||
|
||||
__fastcall TLine::TLine()
|
||||
{
|
||||
};
|
||||
|
||||
__fastcall TLine::TLine(vector3 NPoint, vector3 NVector)
|
||||
{
|
||||
Vector= NVector; Point= NPoint;
|
||||
};
|
||||
|
||||
__fastcall TLine::~TLine()
|
||||
{
|
||||
};
|
||||
|
||||
TPlane __fastcall TLine::GetPlane()
|
||||
{
|
||||
return(TPlane(Point,Vector));
|
||||
};
|
||||
|
||||
double __fastcall TLine::GetDistance(vector3 Point1)
|
||||
{
|
||||
return ( (sqr((Point1.x-Point.x)*Vector.x-(Point1.y-Point.y)*Vector.y)-
|
||||
sqr((Point1.y-Point.y)*Vector.y-(Point1.z-Point.z)*Vector.z)-
|
||||
sqr((Point1.z-Point.z)*Vector.z-(Point1.x-Point.x)*Vector.x))/
|
||||
(sqr(Vector.x)+sqr(Vector.y)+sqr(Vector.z)) );
|
||||
;
|
||||
|
||||
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
__fastcall TPlane::TPlane()
|
||||
{
|
||||
Vector= vector3(0,0,0);
|
||||
d= 0;
|
||||
};
|
||||
|
||||
__fastcall TPlane::TPlane(vector3 NVector, double nd)
|
||||
{
|
||||
Vector= NVector; d= nd;
|
||||
}
|
||||
|
||||
__fastcall TPlane::TPlane(vector3 Point, vector3 NVector)
|
||||
{
|
||||
Vector= NVector; d= -NVector.x*Point.x-NVector.y*Point.y-NVector.z*Point.z;
|
||||
};
|
||||
|
||||
__fastcall TPlane::TPlane(vector3 Point1, vector3 Vector1, vector3 Vector2)
|
||||
{
|
||||
Vector= CrossProduct(Vector1,Vector2); d= -Vector.x*Point1.x-Vector.y*Point1.y-Vector.z*Point1.z;
|
||||
};
|
||||
|
||||
__fastcall TPlane::~TPlane()
|
||||
{
|
||||
};
|
||||
|
||||
void __fastcall TPlane::Normalize()
|
||||
{
|
||||
double mgn= Vector.Length();
|
||||
Vector= Vector/mgn; d/= mgn;
|
||||
};
|
||||
|
||||
double __fastcall TPlane::GetSide(vector3 Point)
|
||||
{
|
||||
return (Vector.x*Point.x+Vector.y*Point.y+Vector.z*Point.z+d);
|
||||
};
|
||||
|
||||
//void __fastcall TPlane::Transform(D3DMATRIX &Transformations)
|
||||
//{
|
||||
// vector3 src= Vector;
|
||||
// D3DMath_VectorMatrixMultiply(Vector,src,Transformations);
|
||||
//};
|
||||
|
||||
bool __fastcall TPlane::Defined()
|
||||
{
|
||||
return !(Vector==vector3(0,0,0));
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
inline double __fastcall Sum(vector3 &Vector)
|
||||
{
|
||||
return( Vector.x+Vector.y+Vector.z );
|
||||
};
|
||||
|
||||
|
||||
bool __fastcall CrossPoint(vector3 &RetPoint, TLine &Line, TPlane &Plane)
|
||||
{
|
||||
double ro= DotProduct(Plane.Vector,Line.Vector);
|
||||
if (ro==0)
|
||||
return( false );
|
||||
ro= (DotProduct(Plane.Vector,Line.Point)+Plane.d)/ro;
|
||||
RetPoint= Line.Point-(Line.Vector*ro);
|
||||
return( true );
|
||||
};
|
||||
|
||||
inline double __fastcall GetLength(vector3& Vector)
|
||||
{
|
||||
return ( Vector.Length() );
|
||||
};
|
||||
|
||||
inline vector3 __fastcall SetLength(vector3& Vector, double Length)
|
||||
{
|
||||
Vector.Normalize();
|
||||
return ( Vector*Length );
|
||||
};
|
||||
//---------------------------------------------------------------------------
|
||||
//#pragma package(smart_init)
|
||||
Reference in New Issue
Block a user