Sortowanie punktów 3D(x,y,z) względem punktu 0,0,0

0

Witam , potrzebuje zrobić generator punktów 3D w strukturze które potem będzie można sortować względem punktu 0,0,0
od najbliżej leżącego do najdalej . Poradzono mi żeby zrobić funkcję sprawdzającą położenie 2 punktów, problem polega na tym że nie zupełnie wiem jak to wszystko połączyć

Napisałem coś takiego:

struct Wektory_3D
{
int x;
int y;
int z;
}

bool czy_mniejsze(Wektory_3D w1,Wektory_3D w2)
{
double odl1=sqrt(static_cast<float>( (w1.x)*(w1.x)+(w1.y)*(w1.y)+(w1.z)*(w1.z)));
double odl2=sqrt(static_cast<float>( (w2.x)*(w2.x)+(w2.y)*(w2.y)+(w2.z)*(w2.z)));
if(odl1>odl2)
return true;
else 
return false;

}
void BubbleSort(Wektory_3D *tab, int n)
{
int zmiana;

do
{
zmiana=0;
for(int i=0; i<n;i++)
{
if(czy_mniejsze(w1,w2))
{
zmiana++;
struct Wektory_3D schowek=w1;
w1=w2;
w2=schowek;
}
}

}
while(zmiana!=0);

}
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(NULL));
int i;
int n=10;
Wektory_3D w[1000];

for(i=0;i<n;i++)
{
w[i].x=rand()%10+1;
w[i].y=rand()%10+1;
w[i].z=rand()%10+1;

cout<<i<<" ";
cout<<w[i].x<<","<<w[i].y<<","<<w[i].z<<endl;

}
 

Jak by ktoś wiedział jak to wszystko ogarnąc proszę o podpowiedź:)

0

Przecież tu już masz gotowy program :P Wywołaj funkcje sortującą i zrobione.

0

Nie lepiej będzie Ci skorzystać już z gotowych rozwiązań?

#include <vector>
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <iterator>
#include <cmath>

class Vector3D {

	private:
		float x, y, z;
		
		// do porównywania wystarczy taka funkcja, nie trzeba używać sqrt
		float size() const {
			return x*x + y*y + z*z;
		}
		
	public:
		Vector3D( float x = 0.0f, float y = 0.0f, float z = 0.0f ): x( x ), y( y ), z( z ) {}
		Vector3D& operator=( const Vector3D& v ) {
			if( this == &v ) return *this;
			x = v.x;
			y = v.y;
			z = v.z;
			return *this;
		}
		
		friend bool operator<( const Vector3D& lhs, const Vector3D& rhs ) {
			return lhs.size() < rhs.size() ? true : false;
		}
		
		friend std::ostream& operator<<( std::ostream& os, const Vector3D& v ) {
			return os << "x: " << v.x << ", y: " << v.y << ", z: " << v.z << ". Size: " << sqrt(v.size());
		}

};

Vector3D make() {
	return Vector3D( ( rand() % 10 ) + 1, ( rand() % 10 ) + 1, ( rand() % 10 ) + 1 );
}


int main( int, char** ) {

	srand( time( 0 ) );

	std::vector< Vector3D >v( 100 );
	std::generate( v.begin(), v.end(), make );
	std::sort( v.begin(), v.end() );
	std::copy( v.begin(), v.end(), std::ostream_iterator<Vector3D>( std::cout, "\n" ) );

	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1