Sprawdź się
Napisz program, który wygeneruje fraktal smok Heighwaya, jednak zamiast rysować go na ekranie, wyznacz pole prostokątnego obszaru określonego przez proste prostopadłe lub równoległe do osi układu współrzędnych styczne do smoka Heighwaya. Wynik zaokrąglij do jednego miejsca po przecinku. Działanie programu przetestuj dla n = 100000
.
Specyfikacja problemu:
Dane:
n
– liczba naturalnax
,y
– liczba wymierne
Wynik:
Program wyświetla zaokrąglone do jednego miejsca po przecinku pole prostokątnego obszaru wyznaczonego przez proste prostopadłe lub równoległe do osi układu współrzędnych styczne do smoka Heighwaya.
Zastanów się, jakie minimalne i maksymalne wartości współrzędnych będą miały punkty wygenerowane przez program.
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
int main() {
int n = 100000;
double x = 0.0, y = 0.0;
double x_max = x, x_min = x, y_max = y, y_min = y;
for (int i = 0; i < n; ++i) {
// losowa liczba całkowita z przedziału <0, 1>
int q = rand() % 2;
// kopia zmiennej x
double x0 = x;
if (q < 1) {
x = 0.5 * x - 0.5 * y;
y = 0.5 * x0 + 0.5 * y;
}
else {
x = -0.5 * x - 0.5 * y + 1;
y = 0.5 * x0 - 0.5 * y;
}
if (x > x_max) {
x_max = x;
}
if (x < x_min) {
x_min = x;
}
if (y > y_max) {
y_max = y;
}
if (y < y_min) {
y_min = y;
}
}
double a = x_max - x_min,
b = y_max - y_min;
cout << round(a*b* 10) / 10 << endl;
}
Napisz program, który przeprowadzi generację paproci Barnsleya, jednak zamiast rysować ją na ekranie, wyznacz pole prostokątnego obszaru wyznaczonego przez proste styczne do paproci Barnsleya prostopadłe lub równoległe do osi układu współrzędnych. Wynik zaokrąglij do jednego miejsca po przecinku. Działanie programu przetestuj dla n = 100000
.
Specyfikacja problemu:
Dane:
n
– liczba naturalnax
,y
– liczba wymierne
Wynik:
Program wyświetla zaokrąglone do jednego miejsca po przecinku pole prostokątnego obszaru wyznaczonego przez proste styczne do paproci Barnsleya prostopadłe lub równoległe do osi układu współrzędnych.
Zastanów się, jakie minimalne i maksymalne wartości współrzędnych będą miały punkty wygenerowane przez program.
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
int main() {
int n = 100000;
double x = 0.0, y = 0.0;
double x_max = x, x_min = x, y_max = y, y_min = y;
for (int i = 0; i < n; ++i) {
// losowa liczba z [0, 1, ..., 99]
int q = rand() % 100;
// kopia zmiennej x
double x0 = x;
if (q < 1) {
x = 0;
y = 0.16 * y;
}
else if (q < 86) {
x = 0.85 * x + 0.04 * y;
y = -0.04 * x0 + 0.85 * y + 1.6;
}
else if (q < 93) {
x = 0.2 * x - 0.26 * y;
y = 0.23 * x0 + 0.22 * y + 1.6;
}
else {
x = -0.15 * x + 0.28 * y;
y = 0.26 * x0 + 0.24 * y + 0.44;
}
if (x > x_max) {
x_max = x;
}
if (x < x_min) {
x_min = x;
}
if (y > y_max) {
y_max = y;
}
if (y < y_min) {
y_min = y;
}
}
double a = x_max - x_min,
b = y_max - y_min;
cout << round(a * b * 10) / 10 << endl;
}