# Учебная практика 2022. Отчет за 28.06.2022. Лазаренко Дарья Геннадьевна. Первая группа.
[TOC]
## Задание 3
Cсылки на сайт shadertoy.com c реализованной Вами с помощью неявных функций в пиксельном шейдере (адаптированный вариант использования языка GLSL) - математическая реализация Буратино(пока с условными операторами if).
### Решение
Задание было выполнено. Решение доступно по [ссылке](https://www.shadertoy.com/view/7dtBD8).
Код решения:
```glsl=1
bool circle(vec2 p, vec2 o, float r) {
float scaleY = iResolution.y / iResolution.x;
return (p.x - o.x) * (p.x - o.x) + (p.y - o.y) * (p.y - o.y) * (scaleY * scaleY) < r*r;
}
bool triangle(vec2 v, vec2 a,float s,float g) {
float x = v.x - a.x,
y = v.y - a.y;
if (y>x*s && y>x*(-s) && y<g) {
return true;
} else return false;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord ) {
// Normalized pixel coordinates (from 0 to 1)
vec2 uv = fragCoord/iResolution.xy;
float x = uv.x;
float y = uv.y;
vec2 uv_ = 1.0-2.0*fragCoord/iResolution.xy;
float x_ = uv_.x;
float y_ = uv_.y;
fragColor = vec4(0.8, 0.8, 0.8, 1.0);
//head
if (circle(vec2(x, y), vec2(0.4, 0.625), 0.09))
fragColor = vec4(0.9, 0.9, 0.7, 1.0);
if (circle(vec2(x, y), vec2(0.37, 0.55), 0.02))
fragColor = vec4(1, 0.3, 0.3, 1.0);
if (circle(vec2(x, y), vec2(0.43, 0.65), 0.015))
fragColor = vec4(0, 0, 0, 1.0);
if (circle(vec2(x, y), vec2(0.428, 0.659), 0.015))
fragColor = vec4(0.9, 0.9, 0.7, 1.0);
if (circle(vec2(x, y), vec2(0.442, 0.5), 0.01))
fragColor = vec4(0, 0, 0, 1.0);
if (circle(vec2(x, y), vec2(0.4445, 0.505), 0.0105))
fragColor = vec4(0.9, 0.9, 0.7, 1.0);
if (((y_+0.2)<(x_+0.2)/10.0)&&((y_+0.2)>(x_+0.2)/(-10.0))&&((x_+0.2)<0.3)) { //nose
fragColor = vec4(0.9, 0.9, 0.7, 1.0);
}
//hat
if (circle(vec2(x, y), vec2(0.4, 0.97), 0.015))
fragColor = vec4(0.7, 0, 0, 1.0);
if(triangle(vec2(0.4, 0.99), uv, 5.0, 0.25))
fragColor = vec4(0.7, 0, 0, 1);
if (circle(vec2(x, y), vec2(0.445, 0.765), 0.015))
fragColor = vec4(0.7, 0, 0, 1.0);
if (circle(vec2(x, y), vec2(0.44, 0.765), 0.015))
fragColor = vec4(0.7, 0, 0, 1.0);
if (circle(vec2(x, y), vec2(0.35, 0.765), 0.015))
fragColor = vec4(0.7, 0, 0, 1.0);
if (circle(vec2(x, y), vec2(0.355, 0.765), 0.015))
fragColor = vec4(0.7, 0, 0, 1.0);
// body
if ((abs(x_-0.2)<0.043)&&(abs(y_-0.1)<0.1)) //neck
fragColor = vec4(0.9, 0.9, 0.7, 1.0);
if ((x_-0.2)*(x_-0.2)*9.0+(y_-1.0)*(y_-1.0) < 0.8 * 0.8) //main body
fragColor = vec4(0.7, 0, 0, 1.0);
if (circle(vec2(x, y), vec2(0.48, 0.25), 0.02))
fragColor = vec4(1, 1, 1, 1.0);
if (circle(vec2(x, y), vec2(0.5, 0.15), 0.02))
fragColor = vec4(1, 1, 1, 1.0);
if ((abs(x_-0.2)<0.05)&&(abs(y_-0.75)<0.25)) //arm
fragColor = vec4(0.9, 0, 0, 1.0);
if (circle(vec2(x, y), vec2(0.4, 0.24), 0.025))
fragColor = vec4(0.9, 0, 0, 1.0);
}
```
Изображение, которое будет показано при компиляции:

## Дополнительно
Исправлена HTML-страница из Задания 1, доступна по [ссылке](https://replit.com/@DariaLazarenko1/practice-task-1#index.html). Изменения: я добавила ссылки на математические реализации Буратино и Лошарика в shadertoy.com, а также изображения с результатом работы программы.