---
# System prepended metadata

title: Учебная практика 2022. Вторник 28.06. Емец Никита.

---

# Учебная практика 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
![](https://i.imgur.com/WHmwVAk.png)
### 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
![](https://i.imgur.com/lTo6LiE.png)
### 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
![](https://i.imgur.com/v4AWyMC.png)
