Witam :)
Polecenie jest następujące:
Napisać program w C++, obiektowo, który wygeneruje 10000 punktów w przestrzeni (nie losowo). Współrzędne punktów mają być wyliczone na podstawie funkcji z=sin(x)*sin(y).
Dziedzina funkcji dla x i y (-pi, pi).
Dla osi x ma być 100 wartości, dla osi y ma być 100 wartości - razem 10000 punktów (100 na 100 punktów).
Wartość funkcji z=sin(x)*sin(y) należy pomnożyć przez 100 (aby uzyskać wyższe wartości dla współrzędnej z).
Współrzędne punktu centralnego do wizualizacji: (500, 300, 100).
Wizualizacja wyników za pomocą programu Anaglif czyli program musi wygenerować odpowiedni plik tekstowy: dane.txt.
program anaglif w załączniku.
oto kod który napisałem:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <fstream>
using namespace std;
int main(){
double a[100], b[100], x[10000], y[10000], z[10000];
int r, j=1;
for(int i=1; i<101; i++){
a[i]=b[i]=-M_PI+i*2*M_PI/101; // nadaje wartosci poszczegolnym x i y, 100 wartosci dla x i y
} // skoro oba naleza do tego samego przedzialu i odlegosc miedzy nimi ma byc taka sama to x[i]=y[i]
for(int i=1; i<10001; i++){ // 10000 mozliwosci wiec kazdemu x[i] odpowiada 100 odpowiednikow y[i] i odwrotnie
r=i%100; // licznik dla x, dzielac jakas liczbe przez 100 jej reszta nalezy do przedzialu od 0 do 99 i jest calkowita
if(i%100==0) // jezeli licznik rowna sie 0 zmieniamy jego wartosc na 100 aby skorzystac z x[100]
r=100;
z[i]=sin(a[r])*sin(b[j])*100; // j nadane wczesniej decyduje o wartosci y[i]
if(i%100==0) // jezeli minelismy pierwsze 100 wspolzednych
if(j==100) // (musimy to sprawdzic w innym wypadku j przy nastepnej petli bedzie mialo wartosc 101)
j=100; // zwiekszamy j o 1 wywolujac kolejny y[i]
else
j++;
x[i]=a[r];
y[i]=b[j];
cout << "x" << i << "=" << x[i] << " "; // wypisuje x[i]
cout << "y" << i << "=" << y[i] << " "; //wypisuje y[i]
cout << "z" << i << "=" << z[i] << endl; //wypisuje z[i]
}
cout << "Zapis danych do pliku " <<endl;
ofstream plik_zapis("dane.txt");
plik_zapis << 10001 <<endl;
plik_zapis << "500 300 100" <<endl; // punkt centralny do wizualizacji
for(int i=1; i<10001; i++)
plik_zapis << x[i] << " " << y[i] << " " << z[i] << endl; // zapis 10000 punktow zaleznych od i
plik_zapis <<"0"<<endl;
plik_zapis.close();
getchar();
return 0;
}
Sprawdzi ktoś czy to jest poprawne? i pytanie czemu w pliku dane.txt zmienna x[10000] ma inna wartość niż zmienna zapisana w programie którym napisałem? :) Na razie napisałem strukturalnie i nie wiem czy jest sens przekształcania tego na obiektowy :p
Pozdrawiam :)