Generowanie punktów w przestrzeni - sfera

0

Witam :)
Napisałem program który generuje punkty w przestrzeni które tworzą sferę. Wizualizację można zobaczyć w programie anaglif podanym w załączniku, plik dane.txt należy skopiować do folderu z tym programem. Oto kod:

 
#include <iostream>
#include <cstdio>
#include <cmath>
#include <fstream>
using namespace std;

int main() {
	ofstream plik_zapis("dane.txt");
	plik_zapis<<"9191"<<endl;
	plik_zapis<<"500 300 100"<<endl;
	for(double x=-50; x<=50; x=x+0.5){
		double a=sqrt(50*50-x*x);
		if(-a+300!=a+300)
			plik_zapis << x+500 << ' ' << a+300 << ' ' << 0+100 <<  endl;
		plik_zapis << x+500 << ' ' << -a+300 << ' ' << 0+100 <<  endl;
		
		if(-a+300!=a+300)
			plik_zapis << x+500 << ' ' << 0+300 << ' ' << a+100 <<  endl;
		plik_zapis << x+500 << ' ' << 0+300 << ' ' << -a+100 <<  endl; 
		
		for(int y=-50; y<=50; y=y+6){
			double b=sqrt(sqrt(50*50-y*y)*sqrt(50*50-y*y)-x*x);
			if(sqrt(50*50-y*y)*sqrt(50*50-y*y)-x*x>=0){
				if(-a+300!=a+300)	
					plik_zapis << x+500 << ' ' << y+300 << ' ' << b+100 << endl;
				plik_zapis << x+500 << ' ' << y+300 << ' ' << -b+100 <<  endl; 	
		        }
		}
		
		for(int i=20; i<180; i=i+20){
	 		double m=x*cos(i*M_PI/180)-0, n=x*sin(i*M_PI/180)+0;
			if(-a+300!=a+300)
				plik_zapis << m+500 << ' ' << a+300 << ' ' << n+100 << endl;
			plik_zapis << m+500 << ' ' << -a+300 << ' ' << n+100 << endl;
	    }
	}
	plik_zapis<<"0";
	cout << "koniec";
	getchar();
	return 0;
}

Pomógłby mi to ktoś przerobić na obietkowy? :)
Próbowałem stworzyć taką klasę:

class wspolrzedne{
public:
	double x;
	void petla(double x, double y, double z){
		if(-y!=y)
			plik_zapis << x+500 << ' ' << y+300 << ' ' << z+100 <<  endl;
		plik_zapis << x+500 << ' ' << -y+300 << ' ' << z+100 <<  endl;
	}
};

ale zeby uzyc plik_zapis musze to uprzedzic ofstream plik_zapis("dane.txt") ale nie wiem gdzie to wcisnąć :)

0
tomcio1243 napisał(a):

Witam :)
Napisałem program który generuje punkty w przestrzeni które tworzą sferę. Wizualizację można zobaczyć w programie anaglif podanym w załączniku, plik dane.txt należy skopiować do folderu z tym programem. Oto kod:

 
#include <iostream>
#include <cstdio>
#include <cmath>
#include <fstream>
using namespace std;

int main() {
	ofstream plik_zapis("dane.txt");
	plik_zapis<<"9191"<<endl;
	plik_zapis<<"500 300 100"<<endl;
	for(double x=-50; x<=50; x=x+0.5){
		double a=sqrt(50*50-x*x);
		if(-a+300!=a+300)
			plik_zapis << x+500 << ' ' << a+300 << ' ' << 0+100 <<  endl;
		plik_zapis << x+500 << ' ' << -a+300 << ' ' << 0+100 <<  endl;
		
		if(-a+300!=a+300)
			plik_zapis << x+500 << ' ' << 0+300 << ' ' << a+100 <<  endl;
		plik_zapis << x+500 << ' ' << 0+300 << ' ' << -a+100 <<  endl; 
		
		for(int y=-50; y<=50; y=y+6){
			double b=sqrt(sqrt(50*50-y*y)*sqrt(50*50-y*y)-x*x);
			if(sqrt(50*50-y*y)*sqrt(50*50-y*y)-x*x>=0){
				if(-a+300!=a+300)	
					plik_zapis << x+500 << ' ' << y+300 << ' ' << b+100 << endl;
				plik_zapis << x+500 << ' ' << y+300 << ' ' << -b+100 <<  endl; 	
		        }
		}
		
		for(int i=20; i<180; i=i+20){
	 		double m=x*cos(i*M_PI/180)-0, n=x*sin(i*M_PI/180)+0;
			if(-a+300!=a+300)
				plik_zapis << m+500 << ' ' << a+300 << ' ' << n+100 << endl;
			plik_zapis << m+500 << ' ' << -a+300 << ' ' << n+100 << endl;
	    }
	}
	plik_zapis<<"0";
	cout << "koniec";
	getchar();
	return 0;
}

Pomógłby mi to ktoś przerobić na obietkowy? :)
Próbowałem stworzyć taką klasę:

class wspolrzedne{
public:
	double x;
	void petla(double x, double y, double z){
		if(-y!=y)
			plik_zapis << x+500 << ' ' << y+300 << ' ' << z+100 <<  endl;
		plik_zapis << x+500 << ' ' << -y+300 << ' ' << z+100 <<  endl;
	}
};

ale zeby uzyc plik_zapis musze to uprzedzic ofstream plik_zapis("dane.txt") ale nie wiem gdzie to wcisnąć :)

Hmm, nie lepiej by było gdybyś najpierw napisał kod który generuje koordynaty i zapisuje je w tablicy? Dzięki temu nie musisz najpierw zapisywać do pliku a potem z niego czytać żeby dostać się do koordynatów. Mając tablicę, możesz bez problemu napisać zewnętrzną funkcję zapisującą taką tablicę do pliku w razie potrzeby, tam gdzie chcesz, bez przymusu.

FYI

double b=sqrt(sqrt(50*50-y*y)*sqrt(50*50-y*y)-x*x);
if(sqrt(50*50-y*y)*sqrt(50*50-y*y)-x*x>=0){ 
sqrt(x) * sqrt(x) = x 

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