# Учебная практика 2022. Вторник 28.06. Емец Никита.
[TOC]
Присутствовал на конференции в Zoom.
## Выполнил задания:
### 1.2
В данном задании надо создать математическую визуализациию Лошарика на сайте shadertoy.com с помощью неявных функций.
Оператор mod является оператором деления по модулю. Он возвращает остаток от деления 1-го операнда на 2-й.
#### Решение
``` glsl=1
float circle(vec2 uv, vec2 p, float r)
{
float l = length(uv-p);
float c = smoothstep(r, r-0.001, l);
return c;
}
void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
vec2 uv = fragCoord.xy/iResolution.xy;
uv.x *= iResolution.x/iResolution.y;
uv -= .5;
uv.x = uv.x+mod(1.*iTime,4.0)-2.0;
//голова
float c1 = circle(uv, vec2(-.07, .36), .1);
float c2 = circle(uv, vec2(-.01, .44), .05);
float c3 = circle(uv, vec2(.04, .36), .05);
float c4 = circle(uv, vec2(-.17, .36), .03);
//шея
float c5 = circle(uv, vec2(-.07, .2), .06);
float c6 = circle(uv, vec2(.001, .1), .06);
//body
float c7 = circle(uv, vec2(.09, -.01), .08);
float c8 = circle(uv, vec2(.25, -.01), .08);
float c9 = circle(uv, vec2(.408, -.01), .08);
//лапы
float c10 = circle(uv, vec2(.02, -.13), .06);
float c11 = circle(uv, vec2(-.05, -.228), .06);
float c12 = circle(uv, vec2(-.07, -.345), .06);
float c13 = circle(uv, vec2(.5, -.11), .06);
float c14 = circle(uv, vec2(.57, -.2), .06);
float c15 = circle(uv, vec2(.64, -.3), .06);
//хвост
float c16 = circle(uv, vec2(.47, .05), .03);
float c17 = circle(uv, vec2(.5, .1), .03);
float c18 = circle(uv, vec2(.53, .15), .03);
float c19 = circle(uv, vec2(.57, .22), .05);
//глаз
float c20 = circle(uv, vec2(-.11, .4), .03);
float c21 = circle(uv, vec2(-.116, .4), .02);
fragColor = vec4(1., 1., .0, 1.0)*c1 // yellow
+ vec4(.0, .0, 1.0, .0)*c2 // blue
+ vec4(1.0, .0, .0, 1.0)*c3 //red
+ vec4(1.0, .0, .0, 1.0)*c4
+ vec4(.0, .0, 1.0, .0)*c5
+ vec4(.5, 1.0, .0, .0)*c6
+ vec4(.0, .0, 1.0, .0)*c7
+ vec4(1.0, .0, .0, 1.0)*c8
+ vec4(1.0, .5, .0, .0)*c9
+ vec4(.0, .0, 1.0, .0)*c10
+ vec4(.0, 1.0, .5, .0)*c11
+ vec4(.0, 1.0, .5, .0)*c12
+ vec4(.0, .0, 1.0, .0)*c13
+ vec4(.0, .0, 1.0, .0)*c14
+ vec4(1.0, .0, .0, 1.0)*c15
+ vec4(.5, .0, 1.0, 1.0)*c16
+ vec4(1.0, .0, 1.0, .0)*c17
+ vec4(1.0, .0, .0, 1.0)*c18
+ vec4(.0, .0, 1.0, .0)*c19;
if (c20!=0.0){
fragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
if (c21!=0.0){
fragColor = vec4(0.0, 0.0, 0.0, 1.0);
}
}
```
Ссылка на shadertoy:
https://www.shadertoy.com/view/fdcBDH

### 1.3
В данном задании надо создать математическую визуализациию Буратино на сайте shadertoy.com с помощью неявных функций.
#### Решение
Функция для создания круга с использованием неявной функции:
``` glsl=1
float circle(vec2 uv, vec2 p, float r)
{
float l = length(uv-p);
float c = smoothstep(r, r-0.001, l);
return c;
}
```
Функция для проверки лежит ли точка над прямой или под прямой:
```glsl=1
bool over(vec2 uv, vec3 line)
{
return uv.y * line.y >= uv.x * line.x + line.z;
}
bool under(vec2 uv, vec3 line)
{
return uv.y * line.y <= uv.x * line.x + line.z;
}
```
Рисуем фигуры:
```glsl=1
//голова
if(circle(uv, vec2(-0.5, -0.1), 0.2)!=0.0)
fragColor = beige;
if(circle(uv, vec2(-0.46, -0.16), 0.05)!=0.0)
fragColor = pink;
if(circle(uv, vec2(-0.35, -0.16), 0.04)!=0.0)
fragColor = black;
if(circle(uv, vec2(-0.35, -0.15), 0.04)!=0.0)
fragColor = beige;
if(circle(uv, vec2(-0.4, -0.03), 0.04)!=0.0)
fragColor = black;
if(circle(uv, vec2(-0.4, -0.02), 0.04)!=0.0)
fragColor = beige;
.....
```
Ссылка на shadertoy:
https://www.shadertoy.com/view/7dcBDH

### 1.4
В данном задании надо создать математическую визуализациию своего имени и фамилии на сайте shadertoy.com с помощью неявных функций.
#### Решение
Функция для проверки лежит ли точка над прямой или под прямой:
```glsl=1
bool over(vec2 uv, vec3 line)
{
return uv.y * line.y >= uv.x * line.x + line.z;
}
bool under(vec2 uv, vec3 line)
{
return uv.y * line.y <= uv.x * line.x + line.z;
}
```
Рисуем фигуры:
```glsl=1
//E
if(uv.y >= 0.4 && uv.y <= 0.42 && uv.x >= -0.75 && uv.x <= -0.7)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.4 && uv.x >= -0.75 && uv.x <= -0.73)
fragColor = black;
if(uv.y >= 0.3 && uv.y <= 0.32 && uv.x >= -0.75 && uv.x <= -0.7)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.22 && uv.x >= -0.75 && uv.x <= -0.7)
fragColor = black;
//M
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.65 && uv.x <= -0.63)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.65 && uv.x <= -0.63)
fragColor = black;
if(over(uv, vec3(-1.8, .7, -0.88)) && under(uv, vec3(-1.8, .7, -0.84)) && uv.y >= 0.2 && uv.y <= 0.42)
fragColor = black;
if(over(uv, vec3(1.8, .7, 1.1)) && under(uv, vec3(1.8, .7, 1.14)) && uv.y >= 0.2 && uv.y <= 0.42)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.46 && uv.x <= -0.44)
fragColor = black;
//E
if(uv.y >= 0.4 && uv.y <= 0.42 && uv.x >= -0.39 && uv.x <= -0.34)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.4 && uv.x >= -0.39 && uv.x <= -0.37)
fragColor = black;
if(uv.y >= 0.3 && uv.y <= 0.32 && uv.x >= -0.39 && uv.x <= -0.34)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.22 && uv.x >= -0.39 && uv.x <= -0.34)
fragColor = black;
//Ц
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.29 && uv.x <= -0.27)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.24 && uv.x <= -0.22)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.22 && uv.x >= -0.29 && uv.x <= -0.18)
fragColor = black;
if(uv.y >= 0.16 && uv.y <= 0.22 && uv.x >= -0.2 && uv.x <= -0.18)
fragColor = black;
//H
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.05 && uv.x <= -0.03)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.05 && uv.x <= 0.07)
fragColor = black;
if(uv.y >= 0.3 && uv.y <= 0.32 && uv.x >= -0.05 && uv.x <= 0.07)
fragColor = black;
//И
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.1 && uv.x <= 0.12)
fragColor = black;
if(over(uv, vec3(1.8, .7, -0.09)) && under(uv, vec3(1.8, .7, -0.05)) && uv.y >= 0.2 && uv.y <= 0.42)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.19 && uv.x <= 0.21)
fragColor = black;
//K
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.24 && uv.x <= 0.26)
fragColor = black;
if(over(uv, vec3(1.8, .7, -0.29)) && under(uv, vec3(1.8, .7, -0.25)) && uv.y >= 0.3 && uv.y <= 0.42)
fragColor = black;
if(over(uv, vec3(1.8, -.7, -0.71)) && under(uv, vec3(1.8, -.7, -0.67)) && uv.y >= 0.2 && uv.y <= 0.3)
fragColor = black;
//И
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.34 && uv.x <= 0.36)
fragColor = black;
if(over(uv, vec3(1.8, .7, -0.53)) && under(uv, vec3(1.8, .7, -0.49)) && uv.y >= 0.2 && uv.y <= 0.42)
fragColor = black;
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.44 && uv.x <= 0.46)
fragColor = black;
//T
if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.55 && uv.x <= 0.57)
fragColor = black;
if(uv.y >= 0.4 && uv.y <= 0.42 && uv.x >= 0.49 && uv.x <= 0.63)
fragColor = black;
//A
if(over(uv, vec3(1.8, .7, -1.05)) && under(uv, vec3(1.8, .7, -1.)) && uv.y >= 0.2 && uv.y <= 0.42)
fragColor = black;
if(over(uv, vec3(-1.8, .7, 1.63)) && under(uv, vec3(-1.8, .7, 1.68)) && uv.y >= 0.2 && uv.y <= 0.42)
fragColor = black;
if(uv.y >= 0.3 && uv.y <= 0.32 && uv.x >= 0.7 && uv.x <= 0.8)
fragColor = black;
```
Результат по ссылке:
https://www.shadertoy.com/view/NdtBD8
