# Учебная практика 2022. Понедельник 27.06. Первая группа. Азаров Владимир Михайлович.
[TOC]
## Задание 1
### Условие
Создать одиночную страницу c названием, в котором есть Ваше Имя и Фамилия, на сайте replit.com, в которой указываются
Ваши Фамилия Имя Отчество + Название Вашей специальности+ Курс+
Ваше Фото в профиль
Cсылки на сайт shadertoy.com c реализованной Вами с помощью неявных функций в пиксельном шейдере (адаптированный вариант использования языка GLSL)
### Решение
Очевидно. Работа находится по [ссылке](https://replit.com/@VAONU/Mypage)
## Задание 2
### Условие
Нужно визуализировать лошарика

### Решение
Идея решения следующая:
Для каждой точки (предварительно нормализованной) последовательно проверяется её принадлейжность к кругам, которые заданы в глобальном массиве. Если выходит, что точка принадлежит некоторому кругу, то она красится в цвет этой фигуры.
```glsl=1
#define _(x) (float(x) / 255.0)
#define d2(x) ((x)*(x))
struct Circle {
vec2 center;
float radius;
vec3 color;
};
Circle ca[] = Circle[](
Circle(vec2(0.2, -0.4), 0.4, vec3(_(219), _(147), _(11))),
...
);
int ca_len = 40;
bool isin_circle(vec2 p, Circle c)
{
float scale = iResolution.y / iResolution.x;
return d2(p.x - c.center.x) + d2((p.y - c.center.y) * scale) < d2(c.radius);
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
// Normalized pixel coordinates (from 0 to 1)
vec2 uv = fragCoord/iResolution.xy;
/* Background */
fragColor = vec4(_(48), _(21), _(38), 1.0);
int i;
for (i = 0; i < ca_len; ++i) {
if (isin_circle(uv, ca[i]))
fragColor = vec4(ca[i].color, 1.0);
}
}
```
Так как экран не квадратен, то чтобы нарисовать круг, а не область ограниченную элипсом, следует домножить разность Y координат на корректирующий коэффициент. Он равен отношению высоты экрана к его ширине (в пикселях).
Работа находится по [ссылке](https://www.shadertoy.com/view/ss3fDn).

## Задание 3
### Условие
Следует математически визуализировать Буратино или Сверчка.

### Решение
В процессе. Код доступен по [ссылке](https://www.shadertoy.com/view/NddBDr).