added double jump and sitting state
This commit is contained in:
		
							parent
							
								
									2e5c5a8dde
								
							
						
					
					
						commit
						90d07dde3f
					
				
					 148 changed files with 13050 additions and 0 deletions
				
			
		
							
								
								
									
										14
									
								
								term1/seminar01_overload/01_myspace/myspace.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								term1/seminar01_overload/01_myspace/myspace.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| #include <iostream> | ||||
| using std::cout; | ||||
| 
 | ||||
| namespace myspace { | ||||
|     void print_n_times(char str[], int n = 10) { | ||||
|             for (int i = 0; i < n; ++i) | ||||
|                     cout << str; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|     char s[] = "nya\n"; | ||||
|     myspace::print_n_times(s); | ||||
| } | ||||
							
								
								
									
										11
									
								
								term1/seminar01_overload/02_cubev/cubev.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								term1/seminar01_overload/02_cubev/cubev.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| int cubeV(int x) { | ||||
|     return x * x * x; | ||||
| }  | ||||
| 
 | ||||
| int main() { | ||||
|     int x = 3; | ||||
|     cout << cubeV(x) << endl; | ||||
| } | ||||
							
								
								
									
										12
									
								
								term1/seminar01_overload/03_cuber/cuber.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								term1/seminar01_overload/03_cuber/cuber.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| #include <iostream> | ||||
| 
 | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| int cubeR(int& x) { | ||||
|     return x * x * x; | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|    int x = 3; | ||||
|    cout << cubeR(x) << endl;   | ||||
| } | ||||
							
								
								
									
										26
									
								
								term1/seminar01_overload/04_count_letters/count_letters.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								term1/seminar01_overload/04_count_letters/count_letters.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| void count_letters(char str[], int& n_letters, int& n_digits, int& n_other) { | ||||
|         while (*str) { | ||||
|             if (*str >= 'a' && *str <= 'z' || *str >= 'A' && *str <= 'Z') { | ||||
|                 n_letters += 1; | ||||
|             } | ||||
|             else if (*str >= '0' && *str <= '9') { | ||||
|                 n_digits += 1; | ||||
|             } | ||||
|             else { | ||||
|                 n_other += 1; | ||||
|             } | ||||
|             str += 1; | ||||
|         } | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|     int n_letters = 0, n_digits = 0, n_other = 0; | ||||
|      | ||||
|     char s[] = "1n!2y#3a$"; | ||||
|     count_letters(s, n_letters, n_digits, n_other); | ||||
| 
 | ||||
|     cout << "letters: " << n_letters << endl << "digits: " << n_digits << endl << "n_other: " << n_other << endl; | ||||
| } | ||||
							
								
								
									
										20
									
								
								term1/seminar01_overload/05_add_price/add_price.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								term1/seminar01_overload/05_add_price/add_price.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| #include <iostream> | ||||
| 
 | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| struct Book { | ||||
|     char title[100]; | ||||
|     int pages; | ||||
|     float price; | ||||
| }; | ||||
| 
 | ||||
| void addPrice(Book& b, float x) { | ||||
|     b.price += x; | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|     Book b = {"One Hundred Years of Solitude", 456, 1200}; | ||||
|     float x = 15.6; | ||||
|     addPrice(b, x); | ||||
|     cout << b.price << endl; | ||||
| } | ||||
							
								
								
									
										20
									
								
								term1/seminar01_overload/06_is_expensive/is_expensive.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								term1/seminar01_overload/06_is_expensive/is_expensive.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| #include <iostream> | ||||
| using std::cout, std::endl; | ||||
| 
 | ||||
| struct Book { | ||||
|     char title[100]; | ||||
|     int pages; | ||||
|     float price; | ||||
| }; | ||||
| 
 | ||||
| bool isExpensive(const Book& b) { | ||||
|     if (b.price > 1000) { | ||||
|         return true; | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| int main() { | ||||
|     Book b = {"One Hundred Years of Solitude", 456, 1200}; | ||||
|     cout << isExpensive(b) << endl; | ||||
| } | ||||
							
								
								
									
										38
									
								
								term1/seminar01_overload/07_vector3f/main.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								term1/seminar01_overload/07_vector3f/main.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| #include <iostream> | ||||
| #include "vector3f.h" | ||||
| using namespace std; | ||||
| 
 | ||||
| int main() { | ||||
|         Vector3f a = {1.0, 2.0, -2.0}; | ||||
|         Vector3f b = {4.0, -1.0, 3.0}; | ||||
|         cout << "a = " << a << endl << "b = " << b << endl; | ||||
|         cout << "a + b = " << a + b << endl;  | ||||
|         cout << "a - b = " << a - b << endl;  | ||||
|          | ||||
|         cout << "0.5 * a = " << 0.5 * a << endl; | ||||
|         cout << "a * 0.5 = " << a * 0.5 << endl; | ||||
| 
 | ||||
|         cout << "(a, b) = " << a * b << endl; | ||||
| 
 | ||||
|         cout << "a / 5 = " << a / 5 << endl; | ||||
|          | ||||
|         cout << "-a = " << -a << endl; | ||||
|         cout << "+a = " << +a << endl; | ||||
|          | ||||
|         cout << "a == b = " << (a == b) << endl;  | ||||
|         cout << "a != b = " << (a != b) << endl;  | ||||
| 
 | ||||
|         a += b; | ||||
|         cout << "a += b: " << a << endl; | ||||
| 
 | ||||
|         a -= b; | ||||
|         cout << "a -= b: " << a << endl;  | ||||
| 
 | ||||
|         a *= 2; | ||||
|         cout << "a *= 2: " << a << endl; | ||||
|         a /= 2; | ||||
|         cout << "a /= 2: " << a << endl; | ||||
| 
 | ||||
|         normalize(a); | ||||
|         cout << "normalize(a): " << a << " |a| = " << norm(a) << endl; | ||||
| } | ||||
							
								
								
									
										96
									
								
								term1/seminar01_overload/07_vector3f/vector3f.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								term1/seminar01_overload/07_vector3f/vector3f.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,96 @@ | |||
| #pragma once | ||||
| #include <cmath> | ||||
| #include <iostream> | ||||
| 
 | ||||
| struct Vector3f { | ||||
|         float x; | ||||
|         float y; | ||||
|         float z; | ||||
| }; | ||||
| 
 | ||||
| Vector3f operator+(const Vector3f& a, const Vector3f& b) { | ||||
|         Vector3f result = {a.x + b.x, a.y + b.y, a.z + b.z}; | ||||
|         return result; | ||||
| } | ||||
| 
 | ||||
| Vector3f operator-(const Vector3f& a, const Vector3f& b) { | ||||
|         Vector3f result = {a.x - b.x, a.y - b.y, a.z - b.z}; | ||||
|         return result; | ||||
| } | ||||
| 
 | ||||
| Vector3f operator*(const Vector3f& a, float f) { | ||||
|     Vector3f result = {f * a.x, f * a.y, f * a.z}; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| Vector3f operator*(float f, const Vector3f& a) { | ||||
|     Vector3f result = {f * a.x, f * a.y, f * a.z}; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| int operator*(const Vector3f& a, const Vector3f& b) { | ||||
|     return a.x * b.x + a.y * b.y + a.z * b.z; | ||||
| } | ||||
| 
 | ||||
| Vector3f operator/(const Vector3f& a, float f) { | ||||
|         Vector3f result = {a.x / f, a.y / f, a.z / f}; | ||||
|         return result; | ||||
| } | ||||
| 
 | ||||
| Vector3f operator+(const Vector3f& a) { | ||||
|     return a; | ||||
| } | ||||
| 
 | ||||
| Vector3f operator-(const Vector3f& a) { | ||||
|     Vector3f result = {-a.x, -a.y, -a.z}; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| bool operator==(const Vector3f& a, const Vector3f& b) { | ||||
|     if (a.x == b.x && a.y == b.y && a.z == b.z) { | ||||
|         return true; | ||||
|     } | ||||
|     return false; | ||||
| } | ||||
| 
 | ||||
| bool operator!=(const Vector3f& a, const Vector3f& b) { | ||||
|     return not (a == b); | ||||
| } | ||||
| 
 | ||||
| void operator+=(Vector3f& a, const Vector3f& b) { | ||||
|     a = a + b; | ||||
| } | ||||
| 
 | ||||
| void operator-=(Vector3f& a, const Vector3f& b) { | ||||
|     a = a - b; | ||||
| } | ||||
| 
 | ||||
| void operator*=(Vector3f& a, float f) { | ||||
|     a = f * a; | ||||
| } | ||||
| 
 | ||||
| void operator/=(Vector3f& a, float f) { | ||||
|     a = a / f; | ||||
| } | ||||
| 
 | ||||
| float squared_norm(const Vector3f& a) { | ||||
|     return a * a; | ||||
| } | ||||
| 
 | ||||
| float norm(const Vector3f& a) { | ||||
|     return sqrt(squared_norm(a)); | ||||
| } | ||||
| 
 | ||||
| void normalize(Vector3f& a) { | ||||
|     a /= norm(a); | ||||
| } | ||||
| 
 | ||||
| std::istream& operator>>(std::istream& in, Vector3f& a) { | ||||
|     in >> a.x >> a.y >> a.z; | ||||
|     return in; | ||||
| } | ||||
| 
 | ||||
| std::ostream& operator<<(std::ostream& out, const Vector3f& a) { | ||||
|         out << "(" << a.x << ", " << a.y << ", " << a.z << ")"; | ||||
|         return out; | ||||
| } | ||||
							
								
								
									
										189
									
								
								term1/seminar01_overload/08_complex/complex.h
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								term1/seminar01_overload/08_complex/complex.h
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,189 @@ | |||
| #pragma once | ||||
| #include <cmath> | ||||
| #include <iostream> | ||||
| 
 | ||||
| struct Complex { | ||||
|     float re; | ||||
|     float im; | ||||
| }; | ||||
| 
 | ||||
| 
 | ||||
| // Передаёмм аргументы через ссылки
 | ||||
| // В данном случае можно было передавать по значению 
 | ||||
| // (так как Complex имеет малый размер)
 | ||||
| // Но в общем случае лучше для структур лучше
 | ||||
| // всегда использовать ссылки 
 | ||||
| 
 | ||||
| Complex operator+(const Complex& a, const Complex& b) { | ||||
|     Complex result = {a.re + b.re, a.im + b.im}; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| Complex operator-(const Complex& a, const Complex& b) { | ||||
|     Complex result = {a.re - b.re, a.im - b.im}; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| Complex operator*(const Complex& a, const Complex& b) { | ||||
|     Complex result = {a.re * b.re - a.im * b.im, a.re * b.im + a.im * b.re}; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| Complex operator/(const Complex& a, const Complex& b) { | ||||
|     float b_squared = b.re * b.re + b.im * b.im; | ||||
|     | ||||
|     Complex result; | ||||
|     result.re = (a.re * b.re + a.im * b.im) / b_squared; | ||||
|     result.im = (a.im * b.re - a.re * b.im) / b_squared; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| Complex& operator+=(Complex &a, const Complex &b) { | ||||
|     a.re += b.re; | ||||
|     a.im += b.im; | ||||
|     return a; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // Унарный оператор -
 | ||||
| // То есть если z - комплексное число x + iy, то -z = - x - iy
 | ||||
| Complex operator-(const Complex& a) { | ||||
|     Complex result; | ||||
|     result.re = -a.re; | ||||
|     result.im = -a.im; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| // Унарный оператор +
 | ||||
| // Ничего не меняет
 | ||||
| Complex operator+(const Complex& a) { | ||||
|     Complex result = a; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| // Унарный оператор *
 | ||||
| // То есть если z - комплексное число x + iy, то *z = x - iy
 | ||||
| // Оператор сопряжения
 | ||||
| Complex operator*(const Complex& a) { | ||||
|     Complex result; | ||||
|     result.re =  a.re; | ||||
|     result.im = -a.im; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // Число + комплексное число (в таком порядке)
 | ||||
| Complex operator+(float a, const Complex& b) { | ||||
|     Complex result = b; | ||||
|     result.re += a; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| // Комплексное число + число
 | ||||
| Complex operator+(const Complex& a, float b) { | ||||
|     Complex result = a; | ||||
|     result.re += b; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| // Число - комплексное число (в таком порядке)
 | ||||
| Complex operator-(float a, const Complex& b) { | ||||
|     Complex result = -b; | ||||
|     result.re += a; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| // Комплексное число - число
 | ||||
| Complex operator-(const Complex& a, float b) { | ||||
|     Complex result = a; | ||||
|     result.re -= b; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| // Комплексное число * число
 | ||||
| Complex operator*(const Complex& a, float b) { | ||||
|     Complex result = a; | ||||
|     result.re *= b; | ||||
|     result.im *= b; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| // Число * комплексное число
 | ||||
| Complex operator*(float a, const Complex& b) { | ||||
|     Complex result = b; | ||||
|     result.re *= a; | ||||
|     result.im *= a; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // Комплексное число / число
 | ||||
| Complex operator/(const Complex& a, float b) { | ||||
|     Complex result = a; | ||||
|     result.re /= b; | ||||
|     result.im /= b; | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| // Число / комплексное число
 | ||||
| Complex operator/(float a, const Complex& b) { | ||||
|     float b_squared = b.re * b.re + b.im * b.im; | ||||
|     return (a * (*b)) / b_squared; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // Перегружаем оператор<< между типами 
 | ||||
| // std::ostream (такой тип имеет std::cout) и Complex
 | ||||
| // Обратите внимание, что мы возвращаем ссылку на ostream
 | ||||
| // Таким образом результатом выражения  cout << a  будет cout
 | ||||
| // Поэтому можно делать так: cout << a << b << c ...
 | ||||
| std::ostream& operator<<(std::ostream& out, const Complex& a) { | ||||
|     if (a.re != 0) | ||||
|         out << a.re; | ||||
| 
 | ||||
|     if (a.im > 0) { | ||||
|         if (a.im != 1.0) | ||||
|             out << " + " << a.im << "i"; | ||||
|         else | ||||
|             out << " + i"; | ||||
|     } | ||||
|     else if (a.im < 0) { | ||||
|         if (a.im != -1.0) | ||||
|             out << " - " << -a.im << "i"; | ||||
|         else | ||||
|             out << " - i"; | ||||
|     } | ||||
|     return out; | ||||
| } | ||||
| 
 | ||||
| std::istream& operator>>(std::istream& in, Complex& c) { | ||||
|     in >> c.re >> c.im; | ||||
|     return in; | ||||
| } | ||||
| 
 | ||||
| float abs(const Complex& a) { | ||||
|     return sqrtf(a.re * a.re + a.im * a.im); | ||||
| } | ||||
| 
 | ||||
| Complex exp(const Complex& a) { | ||||
|     Complex result; | ||||
|     result.re = expf(a.re) * cosf(a.im); | ||||
|     result.im = expf(a.re) * sinf(a.im); | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| Complex sin(const Complex& a) { | ||||
|     Complex result; | ||||
|     result.re = sinf(a.re) * coshf(a.im); | ||||
|     result.im = cosf(a.re) * sinhf(a.im); | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| Complex cos(const Complex& a) { | ||||
|     Complex result; | ||||
|     result.re = cosf(a.re) * coshf(a.im); | ||||
|     result.im = sinf(a.re) * sinhf(a.im); | ||||
|     return result; | ||||
| } | ||||
							
								
								
									
										56
									
								
								term1/seminar01_overload/08_complex/complex_image.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								term1/seminar01_overload/08_complex/complex_image.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,56 @@ | |||
| #include <cstdio> | ||||
| #include <cstdlib> | ||||
| #include <cmath> | ||||
| #include "complex.h" | ||||
| using namespace std; | ||||
| 
 | ||||
| // В этой программе мы рисуем в картинку комплексную функцию,
 | ||||
| // которая задаётся в функции func
 | ||||
| 
 | ||||
| struct Color { | ||||
| 	unsigned char r, g, b; | ||||
| }; | ||||
| 
 | ||||
| Complex func(Complex z) { | ||||
| 	Complex f = 100/(z - 1)*exp(z); | ||||
| 	f.re = fabs(f.re); | ||||
| 	f.im = fabs(f.im); | ||||
| 	if (f.re > 255) | ||||
| 		f.re = 255; | ||||
| 	if (f.im > 255) | ||||
| 		f.im = 255; | ||||
| 	return f; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main() { | ||||
| 	int width = 800, height = 800; | ||||
| 	float x0 = -2.0f, x1 = 2.0f; | ||||
| 	float y0 = -2.0f, y1 = 2.0f; | ||||
| 	 | ||||
| 	// Выделяем память под пиксели
 | ||||
| 	Color* data = (Color*)malloc(sizeof(Color) * width * height); | ||||
| 
 | ||||
| 	// data - это массив цветов размером width * height
 | ||||
| 	// Задаём значения этого массива так, чтобы
 | ||||
| 	// реальная часть функции func соответствовала зелёному цвету,
 | ||||
| 	// а мнимая часть -- синей компоненте цвета
 | ||||
| 	for (int j = 0; j < height; j++) { | ||||
| 		for (int i = 0; i < width; i++) { | ||||
| 			Complex z = {x0 + (x1-x0) / width * i, y0 + (y1-y0) / width * j}; | ||||
| 			Complex f = func(z); | ||||
| 			data[i + width * j].r = 0; | ||||
| 			data[i + width * j].g = f.re; | ||||
| 			data[i + width * j].b = f.im; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	// Сохраняем массив цветов data как картинку в формате .ppm
 | ||||
| 	FILE* file = fopen("complex_image.ppm", "wb"); | ||||
| 	fprintf(file, "P6\n%d %d\n255\n", width, height); | ||||
| 	fwrite(data, sizeof(Color), height * width, file); | ||||
| 	fclose(file); | ||||
| 
 | ||||
| 	// Освобождаем память
 | ||||
| 	free(data); | ||||
| } | ||||
							
								
								
									
										63
									
								
								term1/seminar01_overload/08_complex/complex_movie.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								term1/seminar01_overload/08_complex/complex_movie.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| #include <cstdio> | ||||
| #include <cstdlib> | ||||
| #include <cmath> | ||||
| #include "complex.h" | ||||
| using namespace std; | ||||
| 
 | ||||
| // Это программа создаёт анимацию (набор картинок)
 | ||||
| // которая задаётся как меняющееся во времени
 | ||||
| // комплексная функция (описана в функции func)
 | ||||
| 
 | ||||
| 
 | ||||
| struct Color { | ||||
| 	unsigned char r, g, b; | ||||
| }; | ||||
| 
 | ||||
| Complex func(Complex z, int time) { | ||||
| 	Complex f = 100/(z - (0.02f*time))*exp(z*sin(z)); | ||||
| 	f.re = fabs(f.re); | ||||
| 	f.im = fabs(f.im); | ||||
| 	if (f.re > 255) | ||||
| 		f.re = 255; | ||||
| 	if (f.im > 255) | ||||
| 		f.im = 255; | ||||
| 	return f; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main() { | ||||
| 	int width = 800, height = 800; | ||||
| 	float x0 = -2.0f, x1 = 2.0f; | ||||
| 	float y0 = -2.0f, y1 = 2.0f; | ||||
| 	Color* data = (Color*)malloc(sizeof(Color) * width * height); | ||||
| 
 | ||||
| 	// Повторяем 200 раз
 | ||||
| 	int max_time_steps = 200; | ||||
| 	for (int time = 0; time < max_time_steps; time++) | ||||
| 	{ | ||||
| 		// Задаём изображение в массиве data
 | ||||
| 		for (int j = 0; j < height; j++) | ||||
| 		{ | ||||
| 			for (int i = 0; i < width; i++) | ||||
| 			{ | ||||
| 				Complex z = {x0 + (x1-x0) / width * i, y0 + (y1-y0) / width * j}; | ||||
| 				Complex f = func(z, time); | ||||
| 				data[i + width * j].r = 0; | ||||
| 				data[i + width * j].g = f.re; | ||||
| 				data[i + width * j].b = f.im; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		// Создаём в строке filename имя изображения
 | ||||
| 		// Папка animation должна существовать!
 | ||||
| 		char filename[100]; | ||||
| 		sprintf(filename, "animation/complex_%03d.ppm", time); | ||||
| 
 | ||||
| 		// Сохраняем изображение в картинке по имени filename
 | ||||
| 		FILE* file = fopen(filename, "wb"); | ||||
| 		fprintf(file, "P6\n%d %d\n255\n", width, height); | ||||
| 		fwrite(data, sizeof(Color), height * width, file); | ||||
| 		fclose(file); | ||||
| 	} | ||||
| 	free(data); | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								term1/seminar01_overload/08_complex/complex_movie.mp4
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								term1/seminar01_overload/08_complex/complex_movie.mp4
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										38
									
								
								term1/seminar01_overload/08_complex/complex_test.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								term1/seminar01_overload/08_complex/complex_test.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| #include <iostream> | ||||
| #include "complex.h" | ||||
| 
 | ||||
| using namespace std; | ||||
| 
 | ||||
| // Тут мы тестируем нашу реализацию комплексных чисел
 | ||||
| 
 | ||||
| int main() { | ||||
|     Complex a; | ||||
|     Complex b; | ||||
|      | ||||
|     cin >> a >> b; | ||||
| 
 | ||||
|     cout << "a      = "  << a      << endl  | ||||
|          << "b      = "  << b      << endl  | ||||
|          << "a + b  = "  << a + b  << endl  | ||||
|          << "a - b  = "  << a - b  << endl  | ||||
|          << "a * b  = "  << a * b  << endl  | ||||
|          << "a / b  = "  << a / b  << endl  | ||||
|          << "-a     = "  << -a     << endl  | ||||
|          << "+a     = "  << +a     << endl  | ||||
|          << "*a     = "  << *a     << endl | ||||
|          << "a + 5  = "  << a + 5  << endl | ||||
|          << "5 + a  = "  << 5 + a  << endl | ||||
|          << "a * 5  = "  << a * 5  << endl | ||||
|          << "5 * a  = "  << 5 * a  << endl | ||||
|          << "Exp(a) = "  << exp(a) << endl | ||||
|          << "Sin(a) = "  << sin(a) << endl | ||||
|          << "Cos(a) = "  << cos(a) << endl | ||||
|          << "Exp((a + b) / a) * Cos(a - b) = "  << exp((a + b) / a) * cos(a - b) << endl; | ||||
| 
 | ||||
|     a += b; | ||||
|     cout << "a += b; a = " << a << endl; | ||||
| 
 | ||||
|     // Оператор = мы не перегружали, но это всё равно работает
 | ||||
|     b = a; | ||||
|     cout << "b = a; b = " << b << endl; | ||||
| } | ||||
							
								
								
									
										64
									
								
								term1/seminar01_overload/08_complex/julia.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								term1/seminar01_overload/08_complex/julia.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,64 @@ | |||
| #include <cstdio> | ||||
| #include <cstdlib> | ||||
| #include <cmath> | ||||
| #include "complex.h" | ||||
| using namespace std; | ||||
| 
 | ||||
| struct Color { | ||||
| 	unsigned char r, g, b; | ||||
| }; | ||||
| 
 | ||||
| Complex func(Complex z, Complex c) { | ||||
| 	return z * z + c; | ||||
| } | ||||
| 
 | ||||
| int main(int argc, char** argv) { | ||||
|     Complex c = {0, 0}; | ||||
|     int n = 20; | ||||
| 	int width = 800, height = 800; | ||||
| 	float x0 = -2.0f, x1 = 2.0f; | ||||
| 	float y0 = -2.0f, y1 = 2.0f; | ||||
| 
 | ||||
|     if (argc < 4) { | ||||
|         cout << "usage: julia [re] [im] [n]" << endl | ||||
|              << "using default values: 0 + 0i, n = 20 "<< endl; | ||||
|     } | ||||
|     else { | ||||
|         cout << argv[1] << " + " << argv[2] << "i" << endl << "n = " << n << endl; | ||||
|         sscanf(argv[1], "%f", &c.re); | ||||
|         sscanf(argv[2], "%f", &c.im); | ||||
|         sscanf(argv[3], "%d", &n);     | ||||
|     } | ||||
| 
 | ||||
| 	Color* data = (Color*)malloc(sizeof(Color) * width * height); | ||||
| 
 | ||||
| 	for (int j = 0; j < height; j++) { | ||||
| 		for (int i = 0; i < width; i++) { | ||||
| 			Complex z = {x0 + (x1-x0) / width * i, y0 + (y1-y0) / width * j}; | ||||
| 			for (int k = 0; k < n; ++k) { | ||||
|                 z = func(z, c); | ||||
|             } | ||||
|              | ||||
|             float r = abs(z.re); | ||||
|             float b = abs(z.im); | ||||
|             if (r > 255) { | ||||
|                 r = 255; | ||||
|             } | ||||
|             if (b > 255) { | ||||
|                 b = 255;  | ||||
|             } | ||||
| 
 | ||||
| 			data[i + width * j].r = 255 - r; | ||||
| 			data[i + width * j].g = 0; | ||||
| 			data[i + width * j].b = 255 - b; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	FILE* file = fopen("julia.ppm", "wb"); | ||||
| 	fprintf(file, "P6\n%d %d\n255\n", width, height); | ||||
| 	fwrite(data, sizeof(Color), height * width, file); | ||||
| 	fclose(file); | ||||
| 
 | ||||
| 	free(data); | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								term1/seminar01_overload/08_complex/julia_images/-0.4+0.6i.ppm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								term1/seminar01_overload/08_complex/julia_images/-0.4+0.6i.ppm
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								term1/seminar01_overload/08_complex/julia_images/-0.7-0.38i.ppm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								term1/seminar01_overload/08_complex/julia_images/-0.7-0.38i.ppm
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								term1/seminar01_overload/08_complex/julia_images/-0.8+0.16i.ppm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								term1/seminar01_overload/08_complex/julia_images/-0.8+0.16i.ppm
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								term1/seminar01_overload/08_complex/julia_images/0.28+0.011i.ppm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								term1/seminar01_overload/08_complex/julia_images/0.28+0.011i.ppm
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										60
									
								
								term1/seminar01_overload/08_complex/julia_movie.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								term1/seminar01_overload/08_complex/julia_movie.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| #include <cstdio> | ||||
| #include <cstdlib> | ||||
| #include <cmath> | ||||
| #include "complex.h" | ||||
| using namespace std; | ||||
| 
 | ||||
| struct Color { | ||||
| 	unsigned char r, g, b; | ||||
| }; | ||||
| 
 | ||||
| Complex func(Complex z, Complex c) { | ||||
| 	return z * z + c; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| int main() { | ||||
| 	int width = 800, height = 800; | ||||
| 	float x0 = -2.0f, x1 = 2.0f; | ||||
| 	float y0 = -2.0f, y1 = 2.0f; | ||||
|     int n = 20; | ||||
| 
 | ||||
| 	Color* data = (Color*)malloc(sizeof(Color) * width * height); | ||||
| 
 | ||||
| 	int max_time_steps = 500; | ||||
| 	for (int time = 0; time < max_time_steps; time++) | ||||
| 	{ | ||||
|         Complex c = {-1.5 + (1.5 / max_time_steps) * time, -1.5 + (1.5 / max_time_steps) * time + 1}; | ||||
| 		for (int j = 0; j < height; j++) | ||||
| 		{ | ||||
| 			for (int i = 0; i < width; i++) | ||||
| 			{ | ||||
| 				Complex z = {x0 + (x1-x0) / width * i, y0 + (y1-y0) / width * j}; | ||||
|     			for (int k = 0; k < n; ++k) { | ||||
|                     z = func(z, c); | ||||
|                 } | ||||
|                  | ||||
|                 float r = abs(z.re); | ||||
|                 float b = abs(z.im); | ||||
|                 if (r > 255) { | ||||
|                     r = 255; | ||||
|                 } | ||||
|                 if (b > 255) { | ||||
|                     b = 255;  | ||||
|                 } | ||||
| 				data[i + width * j].r = 255 - r; | ||||
| 				data[i + width * j].g = 0; | ||||
| 				data[i + width * j].b = 255 - b; | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		char filename[100]; | ||||
| 		sprintf(filename, "animation/complex_%03d.ppm", time); | ||||
| 
 | ||||
| 		FILE* file = fopen(filename, "wb"); | ||||
| 		fprintf(file, "P6\n%d %d\n255\n", width, height); | ||||
| 		fwrite(data, sizeof(Color), height * width, file); | ||||
| 		fclose(file); | ||||
| 	} | ||||
| 	free(data); | ||||
| } | ||||
							
								
								
									
										54
									
								
								term1/seminar01_overload/08_complex/mandelbrot.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								term1/seminar01_overload/08_complex/mandelbrot.cpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | |||
| #include <cstdio> | ||||
| #include <cstdlib> | ||||
| #include <cmath> | ||||
| #include "complex.h" | ||||
| using namespace std; | ||||
| 
 | ||||
| struct Color { | ||||
| 	unsigned char r, g, b; | ||||
| }; | ||||
| 
 | ||||
| Complex func(Complex z, Complex c) { | ||||
| 	return z * z + c; | ||||
| } | ||||
| 
 | ||||
| int main(int argc, char** argv) { | ||||
|     int n = 20; | ||||
|     Complex z = {0, 0}; | ||||
| 	int width = 800, height = 800; | ||||
| 	float x0 = -2.0f, x1 = 2.0f; | ||||
| 	float y0 = -2.0f, y1 = 2.0f; | ||||
| 
 | ||||
| 
 | ||||
| 	Color* data = (Color*)malloc(sizeof(Color) * width * height); | ||||
| 
 | ||||
| 	for (int j = 0; j < height; j++) { | ||||
| 		for (int i = 0; i < width; i++) { | ||||
|             z = {0, 0}; | ||||
|             Complex c = {x0 + (x1-x0) / width * i, y0 + (y1-y0) / width * j}; | ||||
|             for (int k = 0; k < n; ++k) { | ||||
|                 z = func(z, c); | ||||
|             } | ||||
| 
 | ||||
|             float r = abs(z.re); | ||||
|             float b = abs(z.im); | ||||
|             if (r > 255) { | ||||
|                 r = 255; | ||||
|             } | ||||
|             if (b > 255) { | ||||
|                 b = 255;  | ||||
|             } | ||||
|             data[i + width * j].r = 255 - r; | ||||
| 			data[i + width * j].g = 0; | ||||
| 			data[i + width * j].b = 255 - b; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	FILE* file = fopen("mandelbrot.ppm", "wb"); | ||||
| 	fprintf(file, "P6\n%d %d\n255\n", width, height); | ||||
| 	fwrite(data, sizeof(Color), height * width, file); | ||||
| 	fclose(file); | ||||
| 
 | ||||
| 	free(data); | ||||
| } | ||||
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								term1/seminar01_overload/homework_overload.pdf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								term1/seminar01_overload/homework_overload.pdf
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in a new issue