Сайт о языке программирования Сuprum Lang


Скачать самую последнию версию Cuprum Lang

//----------------------------------------------------------------------------------------------

14 декабря 2023.

Показываю свой язык программирования для микроконтроллеров Stm
Это младший брат CuprumLang :))
Показано мигание светодиода на отладочной плате.

Раньше язык делал для управления шаговым двигателем по STEP/DIR,
но драйвер сгорел, теперь показываю на светодиоде как это все работает.
На канале есть видео как двигатель управляется.
Там есть плавный разгон и торможение.

Работает все под управлением операционной системы freertos.org
Программа с помощью компилятора превращается в байт код и выполняется на микроконтроллере STM без его перепрошивки.

Если хотите можете отправить донат boosty.to/leonid_vitos/donate на покупку нового драйвера и двигателя для продолжения работ по языку программирования и его испытаний.

Хотелось попробовать все это дело на промышленном сервоприводе типа Yaskawa
В начале планировалось сделать роботизированную руку, но цены на сервоприводы и механику космические,
а за программировать можно хоть что, это легко.

У меня на канале часто смотрят программирование робота Fanuc в CuprumLang вот решил продолжить это нелегкое дело.

//----------------------------------------------------------------------------------------------

16 ноября 2023.

Создал страницу на Boosty

Leonid Vitos


//----------------------------------------------------------------------------------------------

8 ноября 2023.

Программирование анимации походки персонажа в CuprumLang на русском языке. Векторные поля.





удаление_походки:
s0 = Cube.158,Cube.159
names s0
delay 2500

d1 = нач + 1
d2 = кон - 1
del t d1 d2
del r d1 d2
del s d1 d2
возврат

походка:

if stp == 1 {

s1 = Cube.158
names s1
delay 2500
zero t нач кон

d1 = нач + 1
d2 = нач + длина_шага - 1

fc = 10
x_1:
del t d1 d2
d1 += длина_шага
d2 += длина_шага
loop x_1

delay 500
fs = нач
fe = fs + длина_шага / 2

fc = 10
x_2:
copy t fs to fe
//copy r fs to fe
//copy s fs to fe
fs += длина_шага
fe += длина_шага
loop x_2
}

if stp == 2 {

s1 = Cube.159
names s1
delay 2500
zero t нач кон

нач_2 = нач - длина_шага / 2

d1 = нач_2 + 1
d2 = нач_2 + длина_шага - 1

fc = 10
x_3:
del t d1 d2
d1 += длина_шага
d2 += длина_шага
loop x_3
delay 500
нач_2 = нач - длина_шага / 2
fs = нач_2
fe = fs + длина_шага / 2
fc = 10
x_4:
copy t fs to fe
//copy r fs to fe
//copy s fs to fe
fs += длина_шага
fe += длина_шага
loop x_4
}
возврат

main:
int stp = 1
int нач = 2365
int кон = 2615
int нач_2 = 0
int длина_шага = 24
protected_keys 2365,2615

вызов удаление_походки

stp = 1
вызов походка
stp = 2
вызов походка
//ext
//jmp hhhh
//---------------------------------
delay 1500
s1 = Cube.158
names s1

x = 0
y = 0
z = 1
s0 = gauss2(длина_шага/2)
s0 = div(s0,2)
print s0

fs = 2401
fc = 10
x_4531:
sp fs s0 x y z
d1 = fs + длина_шага/2
zero s fs d1
fs += длина_шага
loop x_4531

fs = 2401
fc = 10
x_452:
s1 = zero(длина_шага/2)
s2 = gauss2(длина_шага/2)
vf s fs s1 s1 s2
fs += длина_шага
loop x_452
//ext

hhhh:
//-------------------------------------
delay 1500
s1 = Cube.159
names s1
x = 0
y = 0
z = 1
s0 = gauss2(длина_шага/2)
s0 = div(s0,2)
s1 = mul(s0,4)

print s0

print s1

fs = 2389
fc = 10
x_453:
sp fs s0 x y z
d1 = fs + длина_шага/2
zero s fs d1
fs += длина_шага
loop x_453

//-------------------------------------
fs = 2389
fc = 10
x_45:
s1 = zero(длина_шага/2)
s2 = gauss2(длина_шага/2)
vf s fs s1 s1 s2
fs += длина_шага
loop x_45

//----------------------------------------------------------------------------------------------

3 ноября 2023.

Программирование анимации открытия двери в CuprumLang на русском языке



Программа_Открывание_Дверей:
//Имя двери
s1 = Cube.078
names s1

delay 500

//С какого кадра начинаем
fs = 2365

//Длинна между началом и концом
size = 2614 - 2365

// Параметр задает стиль
// открывания двери
j = 0.8245

//Формируем кривые открывания двери

Если Стиль_Открывания_Двери == 1 {
s1 = slowfast(j,size)
}

Если Стиль_Открывания_Двери == 2 {
s1 = pol_inv(-9,-15,9,-9,size)
}

Если Стиль_Открывания_Двери == 3 {
s1 = bell(-pi/j,pi/j,size)
}

Если Стиль_Открывания_Двери == 4 {
s1 = fastslow(j,size)
}

//Печатаем кривую
Печать s1

//Накладываем тайминг или стиль движения
//двери
timing t fs s1
возврат


main:
int Стиль_Открывания_Двери = 3
вызов Программа_Открывание_Дверей



//----------------------------------------------------------------------------------------------

3 ноября 2023.

В этом выпуске показана установка тайминга у мячика.
Получилось несколько необычно как всегда.

Для программирования анимации и был создан CuprumLang изначально,
но если анимационные возможности не использовать,
CuprumLang можно использовать для обучения программированию для самых начинающих,
и чтобы не сбивать руку есть фигурные скобочки.

Для облегчения процесса обучения есть шаговый режим выполнения программы.
Микро отладчик.

Когда в будущем перейдете на другие языки программирования типа
java, с, с++, c# не надо будет переучиваться.
Там тоже будут фигурные скобочки.

CuprumLang - это как нано версия языка С.





//----------------------------------------------------------------------------------------------

1 ноября 2023.

В язык программирования добавил массивы





//----------------------------------------------------------------------------------------------

30 октября 2023.

Потихоньку делаю перевод с русского на французский язык. Перевод производится с помощью Гугла переводчика.

Французская страница языка программирования

//----------------------------------------------------------------------------------------------

29 октября 2023.

В этой версии языка программирования в условиях теперь нельзя использовать математические выражения.
Это сделано для упрощения интерпретатора, повышение скорости его работы и уменьшение размера исходников.
Уже сейчас размер составляет около 44000 строк кода.
Может в будущем этот язык можно будет завести на микроконтроллеры, а большие размеры этому могут помешать.
В общем, я за стабильность, простоту и снижение неопределенности.


Но самое главное это не это.
Самое главное это улучшение читабельности кода программы.
Когда пройдет много много лет, чтобы этот код можно было легко понять.

В условиях можно использовать встроенные переменные и переменные, которые можно объявлять.
Можно использовать скобки ().

&& - Это оператор И, AND
|| - Это оператор ИЛИ, OR

На других национальных языках есть другие синонимы оператора И и ИЛИ.
Можете использовать синонимы или без синонимов, как кому нравиться, но в итоге все преобразуется
в эти символы &&,||.


if a > b and d > r {
}

если a меньше b и d равно r {
}

Работа математических выражений сохраняется в вызовах функций
и операторах break, прервать, continue, продолжить, goto, jmp и Перейти
но только когда у вас два выражения разделенных знаком сравнения этих выражений.
Это старый режим работы.
Это было сделано когда IF не был реализован как ключевое слово языка программирования, а работать было нужно.

call a + 3 > b Переходим_на_Выход
вызов a > b Переходим_на_Выход
перейти a != b Переходим_на_Выход

//----------------------------------------------------------------------------------------------

27 октября 2023.

Напоминание про встроенные переменные. Они часто встречаются в примерах. Для программирования их более чем достаточно.

Эти переменные которые не надо объявлять они уже объявлены в самом языке программирования.

Это как регистры процессора x86 eax, ecx, ebx, edi, esi

Эти переменные имеют тип decimal. Тип с плавающей точкой до 29 знаков после запятой.


Латинский алфавит a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z


Русский алфавит а, б, в, г, д, е, ё, ж, з, и, й, к, л, м, н, о, п, р, с, т, у, ф, х, ц, ч, ш, щ, ъ, ы, ь, э, ю, я


Глаголица Ⰰ, Ⰱ, Ⰲ, Ⰳ, Ⰴ, Ⰵ, Ⰶ, Ⰷ, Ⰸ, Ⰹ, Ⰺ, Ⰻ, Ⰼ, Ⰽ, Ⰾ, Ⰿ, Ⱀ, Ⱁ, Ⱂ, Ⱃ, Ⱄ, Ⱅ, Ⱆ, Ⱇ, Ⱈ, Ⱉ, Ⱊ, Ⱋ, Ⱌ, Ⱍ, Ⱎ, Ⱏ, Ⱐ, Ⱑ, Ⱒ, Ⱓ, Ⱔ, Ⱕ, Ⱖ, Ⱗ, Ⱘ, Ⱙ, Ⱚ, Ⱛ, Ⱜ, Ⱝ, Ⱞ


Для переменной типа int существует диапазон

переменных от i0 до i1001.


Для переменной типа decimal существует диапазон

переменных от d0 до d1001.


Для переменной типа string существует диапазон

переменных от s0 до s1001.


//----------------------------------------------------------------------------------------------

26 октября 2023.

Исторический выпуск.

Программирование на русском языке и глаголице в Cuprum Lang.

Скачайте новую версию с поддержкой русского, английского, немецкого, итальянского и французского языков
Скачать CuprumLang 3.09

Для английского, немецкого, итальянского и французского языков документация будет выпущена позднее.



//----------------------------------------------------------------------------------------------

25 октября 2023.

Программирование на итальянском языке в Cuprum Lang




//----------------------------------------------------------------------------------------------

25 октября 2023.

Программирование на немецком языке в Cuprum Lang




//----------------------------------------------------------------------------------------------

24 октября 2023.

Программирование на русском языке и глаголице в Cuprum Lang




//----------------------------------------------------------------------------------------------

22 октября 2023.

Потихоньку пишу документацию к русской версии.

Идет подготовка к запуску...

Как вам такие синонимы операторов сравнения?


Операторы сравнения Cuprum Lang
Оператор сравнения Синоним на русском языке Пример кода
==
равно
равняется
тождественно
эквивалентно
одинаковы
одинаковые

если g == f {
    g ++
}

если g равно f {
    g ++
}

if g равняется f {
    g ++
}

if g == f {
    g ++
}
!=
неравно
не равняется
не равняются
не тождественно
неэквивалентно
неодинаково
неодинаковы
неодинаковые
различные

если g != f {
    g ++
}

если g неравно f {
    g ++
}

if g неодинаковы f {
    g ++
}

if g != f {
    g ++
}
>=
больше или равно
больше или равны

если g >= f {
    g ++
}

если g больше или равно f {
    g ++
}

if g больше или равны f {
    g ++
}

if g >= f {
    g ++
}
<=
меньше или равно
меньше или равны

если g <= f {
    g ++
}

если g меньше или равно f {
    g ++
}

if g меньше или равны f {
    g ++
}

if g <= f {
    g ++
}
>
больше
если g > f {
    g ++
}

если g больше f {
    g ++
}

if g > f {
    g ++
}
<
меньше
если g < f {
    g ++
}

если g меньше f {
    g ++
}

if g < f {
    g ++
}



Ключевые слова Cuprum Lang — это предварительно определенные зарезервированные слова,
которые имеют специальные значения для интерпретатора.


Ключевые слова Cuprum Lang
Оператор Синоним на русском языке Пример кода
if
если
если g == f {
    g ++
}

//----------------------------------------------------

if g == f {
    g ++
}
else
иначе
если g == f {
    g ++
}
иначе {
     f = x + 40
}

//---------------------------------------------------

if g == f {
    g ++
}
else {
     f = x + 40
}
while
пока
пока g > 40 {
    g = g - 2
}

//----------------------------------------------------

while g > 40 {
    g = g - 2
}
call
вызов
вызов g > 1 подпрограмма_1
вызов подпрограмма_2

//----------------------------------------------------

call g > 1 подпрограмма_1
call подпрограмма_2

jmp
перейти
перейти g > 1 метка_1
перейти метка_2

//----------------------------------------------------

jmp g > 1 метка_1
jmp метка_2

continue
продолжить
продолжить g > 1
продолжить

//----------------------------------------------------

continue g > 1
continue

break
прервать
прервать g > 1
прервать

//----------------------------------------------------

break g > 1
break

return
возврат
возврат

//----------------------------------------------------

return

loop
цикл
цикл d < 23 метка_23
цикл метка_23

//----------------------------------------------------

loop d < 23 метка_23
loop метка_23


print
печать
печать d + w
s90 = Привет
печать s90

//----------------------------------------------------

print d + w
s90 = Привет
print s90


//----------------------------------------------------------------------------------------------

21 октября 2023.

Программирование на французском языке в Cuprum Lang




//----------------------------------------------------------------------------------------------

17 октября 2023.

В видео показано как программировать на русском языке в Сuprum Lang.

Программа еще проходит завершающее тестирование.

Также можно будет программировать на английском, французском, немецком и итальянском языке.

Максимум можно смешивать 2 языка в одной программе.

Хотя все может измениться.


Программирование на русском языке в Cuprum Lang. Видео в лучшем качестве. Скачать



//----------------------------------------------------------------------------------------------

28 сентября 2023.

В новой версии нашлись небольшие ошибки и они уже исправлены.

Скачайте новую версию снова CuprumLang 3.0.7


//----------------------------------------------------------------------------------------------

26 сентября 2023.

Обновление программы CuprumLang

Скачать можно по ссылке CuprumLang 3.0.7

Старые версии программы удалены и положены в архив.

Используйте самую новую версию программы.



Нововведения

Добавлена возможность переменным int и decimal задавать произвольные имена.


//Пример кода

int привет = 23;

decimal sdg = -341;

int we = 12;

decimal wee = 21;


wee -= 2;

wee = sqrt(we+pi) + 2 + we - wee^3 - sdg + привет;

print wee;


//----------------------------------------------------------------------------------------------

24 сентября 2023.

Эти две серии мультфильма оказались пророческими.

Это зашифрованная притча о высокоразвитых цивилизациях.


Я сам это понял только в сентябре 2023 года,

и решил продолжать делать сериал про Кота-Инопланетянина.

Последняя серия была сделана в 2021 году.


//----------------------------------------------------------------------------------------------

21 сентября 2023.


Скоро выйдет новая версия языка программирования CuprumLang 3.00.7.

//----------------------------------------------------------------------------------------------

3 декабря 2022.

Выпустил новый язык программирования CuprumLang 2D.
С помощью его можно рисовать картинки из простых графических примитивов.
Прилагается 3 примера.
Если Вы совсем не умеете программировать, и не знаете что это такое , то это изобретение для Вас.

Квадратик или кружок Вы сможете нарисовать с помощью кода и затем картинку сохранить в формате png.
Можно даже сделать примитивную анимацию применяя переменную rnd.

Скачать можно по ссылке CuprumLang 2D.


//----------------------------------------------------------------------------------------------

//----------------------------------------------------------------------------------------------

4 августа 2022.

Обновление программы CuprumLang

Скачать можно по ссылке CuprumLang 3.00.5.


Старые ссылки на старые версии программы удалены. Используйте самую новую версию программы.

//----------------------------------------------------------------------------------------------

10 ноября 2021.

Обновление программы CuprumLang

//----------------------------------------------------------------------------------------------

10 октября 2021.

Обновление программы Cuprum Player 2.4

Скачать можно по ссылке Cuprum Player 2.4.



Основное назначение программы это изготовление секвенций скриншотов во время просмотра видео.

При нажатии на кнопку Play Slow - начинается медленный просмотр с одновременной записью кадров видео.

Автозапись можно убрать, если снять галочку с чекбокса - Auto screenshot.

Скорость просмотра задается в миллисекундах в поле Interval. Миниальное значение 24 миллисекунды.

При просмотре можно сохранить метку при нажатии на кнопку Get Position.

Далее по этим меткам можно перемещаться, чтобы не искать нужное место на таймлайне проигрывателя.

Все скриншоты записываются в единый каталог, который можно открыть нажатием на кнопку Screenshot Catalog.

Имя файла скриншота формируется из номера New Number + счетчика. Новый номер можно задать нажатием на кнопку New Number.

Такой алгоритм сделан для того, чтобы в одной папке хранить длинные секвенции картинок в упорядоченном виде.


Важное замечание !

Размер скриншота зависит от размера экрана проигрывателя на мониторе, и не зависит от размера самого видео !


//----------------------------------------------------------------------------------------------

8 октября 2021.

Обновление программы Mix

Скачать можно по ссылке Mix 2.58.


Программа Mix использует программу FFmpeg ffmpeg.org

в своей работе для разбивки видео на отдельные кадры,

и для соединения видео в формате h264 без перекодирования.

Пример использования на Youtube


//----------------------------------------------------------------------------------------------

16 апреля 2021.

Обновление CuprumLang для Blender и Maya.

Пример кода - Управление позами персонажа.

Пример кода на Youtube


rot:
add_pose 1,0
add_pose 2,10
add_pose 3,20
add_pose 4,30

s1 = get_pose(p)
d1 = float(s1)
d1 += g
print d1

s0 = Empty.002,Empty.003,Empty.004,Empty.005,
s0 += Empty.006,

s0 += z_0.003,z_0.004

names s0

//copy t s1 to f
//copy r s1 to f
//copy s s1 to f
copy f d1 to f
ret


start:
p = 2
g = rnd(-7,7)
//g = -5
print g
f = frame
call rot

//----------------------------------------------------------------------------------------------

31 марта 2021.

Плановое обновление CuprumLang для Blender и Maya.
Пример кода в примере.

names Main
step = 12
fs = 0
fe = 100
//s0 = 0.02,-0.02,
s0 = 5,-5,

s10 = r

del_in s10 fs fe
copy s10 fs to fe
f = fe - fs
s0 = clone(s0,f / len(s0))
print s0
max = fe

//Генерация пустого массива для установки
//нулевых ключей

s4 = zero(f)
vf s10 fs step s4 s4 s4
//---------------------------------------

delay 1000
vf s10 fs step s20 s20 s0

//----------------------------------------------------------------------------------------------



//----------------------------------------------------------------------------------------------

16 декабря 2020.

Открыл канал на Zen


На Zen буду размещать свой мультипликационный сериал про Кота-Инопланетянина

//----------------------------------------------------------------------------------------------



//----------------------------------------------------------------------------------------------

5 ноября 2020.

Принцип работы функций Timing и Spacing.
Сокращенное название Ti и Sp.

Timing and Spacing

//----------------------------------------------------------------------------------------------



//----------------------------------------------------------------------------------------------

5 ноября 2020.

Программа клиент для сервера CuprumLang.
Клиент написан на языке программирования C#.
Скачать можно по ссылке CuprumLang Client.


Пример видео применения клиента для программирования движения персонажа Кота-Инопланетянина
CuprumLang - Legs. Blender 2.90.

Пример кода в примере.

fs = 10880
fe = 10910
a = fe-fs

//Задаем имя контроллера.
names R_h

//Удаляем старое движение контроллера R_h.
del_in t fs fe

//Движение идет по S-образной кривой
s1 = slowfast(0.6,a)

//Задаем timing у контроллера R_h.
ti t fs s1

//Задаем вектор для функции sp в диапазоне от - 1 до +1.
//Значения [t1],[t2],[t3],[t4] меняем на клиенте на цифры от слайдеров.
//В данном случае цифры должны быть от 0 до 100.
d1 = -1
d2 = 1
x = d1 + ((d2-d1)/100)*[t1]
y = d1 + ((d2-d1)/100)*[t2]
z = d1 + ((d2-d1)/100)*[t3]

//Задаем амплитуду для функции sp от 0.1 до 15.
d1 = 0.1
d2 = 15
f = d1 + ((d2-d1)/100)*[t4]

//Движение идет по распределению Гаусса
s0 = gauss2(a)
s0 = mul(s0,f)

//Задаем spacing у контроллера R_h.
sp fs s0 x y z

//----------------------------------------------------------------------------------------------



//----------------------------------------------------------------------------------------------

5 ноября 2020.

Плановое обновление CuprumLang для Blender и Maya.
Исправлено 3 мелких ошибки

//----------------------------------------------------------------------------------------------



//----------------------------------------------------------------------------------------------

20 октября 2020.
Большое обновление CuprumLang для Blender и Maya.
Появилась функция записи движения мышки контроллеров
Просто включаете запись и двигайте мышкой контроллер, и это движение будет записано

//----------------------------------------------------------------------------------------------



//----------------------------------------------------------------------------------------------

12 сентября 2020.

Небольшое обновление CuprumLang для Blender и Maya.
Появились функции move_stop и key_vector
Эти функции применяются для организации каркаса походки персонажа
Пример кода

//Удаляем все
names Main
del t 9040 10000

names R_h,L_h
del t 9080 10000
//---------------

//Тело персонажа
names Main
x = 9000
y = 9020
fc = 20
f1:

key_vector x y
x += 20
y += 20
loop f1
//-----------

//Правая нога
names R_h
x = 9020
step = 20
fc = 10
f2:

move_stop x step
x += 40
loop f2
//-----------

//Левая нога
names L_h
x = 9000
step = 20
fc = 10
f3:

move_stop x step
x += 40
loop f3
//-----------

Примеры видео для функций move_stop и key_vector

Walking 1
Walking 2

//----------------------------------------------------------------------------------------------



//----------------------------------------------------------------------------------------------

5 сентября 2020.

Небольшое обновление CuprumLang для Blender и Maya.
Появилась новая версия функции plane_ext
Пример кода

include C:\CuprumLang\M\key22.txt
s1 = avg(s1,2)
s2 = avg(s2,2)

s1 = nrm(s1,0.71)
s2 = nrm(s2,0.42490011125)

a = 11500
b = 11500 + 24
max = b

names R_h
del_in t a b
zero t a b

plane_ext a b s1 s2 0 0 1

Пример видео для функции plane_ext

//----------------------------------------------------------------------------------------------



//----------------------------------------------------------------------------------------------

3 сентября 2020.

Выкладываю программу Lines для CuprumLang.
Скачать можно по ссылке Lines 1.41.



Пример работы функции plane_ext

Для работы этого примера понадобится программа Lines 1.41

Пример видео для функции plane_ext

Пример кода

include C:\CuprumLang\M\key22.txt
s1 = nrm(s1,1)
s2 = nrm(s2,1)

a = 1
b = 300
s3 = Empty

names Cube
del_in t a b
zero t a b

plane_ext a b s1 s2 s3

//----------------------------------------------------------------------------------------------


//----------------------------------------------------------------------------------------------

Сегодня исторический день 30 августа 2020.

Выкладываю свой язык программирования CuprumLang для Blender и Maya.

//----------------------------------------------------------------------------------------------



Теперь о анимации и языке программирования Сuprum Lang

Основной принцип персонажной анимации это - Запрет одиночного движения.
Как проверить все это?

Пример №1
Допустим если сжать или рассжать пальцы руки,
то будут двигаться пальцы и сама рука.

В трехмерном редакторе очень легко подвигать пальцами персонажа и не подвигать самой рукой.
Нарушить этот запрет очень легко в 3d.

Такое движение будет смотреться плохо и некрасиво.
Дело в том, что мозг знает как движется рука.

Пример №2
Если двигаем голову персонажа надо двигать и телом.

Одну голову крутить нельзя в этом и есть сама суть запрета одиночного движения.
Все части персонажа должны двигаться одновременно.

После сотен экспериментов стал ясен и понятен этот принцип запрета.

Первичная информация о CuprumLang

Этот экспериментальный язык программирования начал развиваться

с марта 2018 года как язык программирования для анимации в программе Blender.


CuprumLang - Это очень простой интерпретатор с встроенным отладчиком

написанный на языке высокого уровня C#.


Почему такое название? В таблице Менделеева элемент под

номером 29 имеет обозначение как CU или медь.

По латыни Cuprum.


Этот язык программирования решает одну не простую и краеугольную задачу по анимации персонажей.
Как можно быстрее сделать движения персонажа натуральными.
Термин шевеляж очень часто встречается в среде аниматоров.

Шевеляж - это неправильное движение персонажа.
Вроде бы персонаж движется, но немного неверно.

Предлагаю ввести новый термин - Оживляшь?
Оживляшь - это степень оживления персонажа.

Шкала оживления персонажа и оценка его движения.
1.0 - Персонаж движется как настоящий.
0.5 - Движения не то не сё.
0.1 - Шевеляж.
0.0 - Персонаж движется плохо или движения его почти хаотичные.

Было проведено несколько тысяч экспериментов по оживления персонажей.
1 канал на Youtube по оживлению персонажей и других экспериментов с анимацией

2 канал на Youtube по оживлению персонажей и других экспериментов с анимацией.


Язык имеет три типа переменных int, decimal, string.
Все переменные глобальные.
В языке невозможно задавать свои переменные.
Возможно в будущем можно будет добавлять свои названия
переменных,но пока достаточно встроенных для всех типов
специальных задач.


Этот язык это фактически смесь ассемблера и языка C
с большим множеством встроенных функций.

Существуют уже заранее определенные переменные
и их как оказалось вполне достаточно для создания
простых специализированных программ.

Это буквы латинского алфавита a, b, c, d,...z.
для типа данных decimal (плавающая точка).

Для переменной типа int существует диапазон
переменных от i0 до i1001.

Для переменной типа decimal существует диапазон
переменных от d0 до d1001.

Для переменной типа string существует диапазон
переменных от s0 до s1001.


Язык можно использовать как калькулятор.
Максимальная точность вывода 29 знаков.



Самые простые программы выглядят так.

print Hello, world!
print 123


a = 1
b = 2
a = a+b
print a


//Работа со строчками
s0 = Hello,
s0 += world !
print s0


a = 1 + 3 - sqrt(sin(2))
b = 2.001
a = a + b/3
print a


d90 = 123
a = 1
b = 2
a += b * sin(b) + sqrt(d90)
print a


//Генератор псевдослучайных чисел
a = rnd(1.01 , 40)
print a


Функция или подпрограмма задается очень просто.
Это точка входа с уникальным именем и обязательно
оканчивающаяся на двоеточие и заканчивающееся
ключевым словом Ret или Return

Функция вызывается ключевым слово Сall
Функцию можно вызывать по условиям Сall a > b link
В данном случае работает это так.
Если a больше b тогда переходим на подпрограмму link.

Важный момент!
В условиях перехода можно указывать только 2 переменные или
математическое выражение без пробелов.

Есть еще одно свойство инструкции call

call a link
call a+b+c link

Если переменная a или математическое выражение больше нуля, то осуществляется переход на link
Математическое выражение необходимо писать без пробелов.

call a link
call a != b link
call a+1 > b+2 link

link:
a += 2
ret

privet_1:
b += 1
ret

privet_2:
d += 1
return


Точка входа задается ключевым словом start:
Во всех точках входа двоеточие обязательно.

Ключевое слово start: можно не указывать если в этом нет необходимости.

link:
a += 2
ret


privet_1:
b += 1
ret


privet_2:
d += 1
return


start:
call privet_1
call privet_2
call a > b link
call a+1 < b+2 link
print d

Условные и безусловные переходы.

jmp link
jmp a link
jmp a+b+c link
jmp a == 3 link_2

goto link
goto a link
goto a+b+c link
goto a == 3 link_2

jmp и goto это абсолютно одинаковые инструкции.
Важный момент!
В условиях перехода можно указывать только 2 переменные
или математическое выражение без пробелов.

Есть еще одно свойство инструкции jmp,goto

jmp a link
jmp a+b+c link

goto a link
goto a+b+c link

Если переменная a или математическое выражение больше нуля, то осуществляется переход на link
Математическое выражение необходимо писать без пробелов.

Условия if и else.

Фигурная скобка { должна находится на одной строке в условии.

if d > z {
   z = z + sqrt(d)
}

Инструкция else должна находится строго за иструкцией if.
Разрыв не допускается.

Фигурная скобка { должна находится на одной строке с else
Вложенность может быть любой.

if d > z {
     d++
     print d
}
else {
    z--
    print z
}


//Если переменная d больше нуля,тогда условие выполняется
if d {
     d++
     print d
}
else {
    z--
    print z
}


//Если математическое выражение a+b+c больше нуля, тогда условие выполняется
if a+b+c {
     d++
     print d
}
else {
    z--
    print z
}

Инструкции while, break, continue

Фигурная скобка { должна находится на одной строке с while

//--------------------------------------------
d = 9
while d > a {
      a ++
}
print a
//--------------------------------------------
//--------------------------------------------
d = 900
while d != a {
      a ++
      if a == 130 {
         break
      }
}
print a
//--------------------------------------------
//--------------------------------------------
a = 9
while d < a {
      a ++
      break a == 10
}
print a
//--------------------------------------------
//--------------------------------------------
a = 49
while d == a {
      a ++
      continue a == 10
}
print a
//--------------------------------------------
//--------------------------------------------
//Если a больше нуля, тогда условие выполняется
a = 49
while a {
      a --
}
print a
//--------------------------------------------

//Если математическое выражение a+b+c больше нуля, тогда условие выполняется
//--------------------------------------------
a = 1
while a+b+c {
      a --
}
print a
//--------------------------------------------


Break и Сontinue можно использовать с условиями в While

Выход из цикла также можно завершить инструкцией jmp из любой вложенности

//--------------------------------------------
d = 140
while d > a {
      a ++
      jmp a >= 100 link_exit
}
print d
//Завершение программы
exit

link_exit:
print a
//Завершение программы
exit
//--------------------------------------------


Ключевое слово языка include или #include

В текстовых файлах можно размещать только названия строк с данными,
чтобы на занимать место в окне программы.

//Эти данные находятся в файле 1.txt
s0 = 1,2,3,4,3,4,3,4,5,6;
s10 = 10,20,30,40,30,40,30,40,50,60;

Строка обязательно должна оканчиваться на точку с запятой,
если она находится в текстовом файле.
В самой программе при редактирование кода это необязательно.

//В программе пишем так.
include c:\1\1.txt
print s1


Организация циклов с помощью инструкции Loop

Встроенная переменная fc является счетчиком с типом данных int.
В ней задается количество итераций цикла.
При достижении команды loop из переменной fc вычитается число 1.
Как только переменная fc станет меньше нуля или равной нулю,
работа цикла прекратится.


//Выполнить цикл 10 раз
fc = 10
cycles:
  a ++
loop cycles

print a

Циклы можно задавать с условиями.
Если переменная a будет равна 3, тогда работа цикла прекратится досрочно.

//Выполнить цикл
fc = 10000
cycles:
a ++
loop a == 3 cycles

print a

Важный момент!
В условиях цикла можно указывать только 2 переменные или математическое выражение без пробелов.

Есть еще одно свойство инструкции loop

loop a link
loop a+b+c link

Если переменная a или математическое выражение больше нуля, то осуществляется переход на link
Математическое выражение необходимо писать без пробелов.


Выполнение математического выражения по условию

Например если d больше 10, тогда выполняется математическое выражение a = f + d10

km d > 10 a = f + d10
km d > 11 g = f + d1+ sin(d10)

d10 = 900
d = 900
f = 2
km d > 10 a = f + d10
km d > 11 g = f + d1+ sin(d10)
print a
//print g


Логические операции AND,OR,NOT,CMP,BETWEEN

AND - Если 2 математических выражения истинны, тогда в переменную d будет записано число 1.
Если выражения не истинны, тогда будет записан 0.
В данном случае print напечатает 1.

d = and(2 == 2,5 > 2*2)
print d


OR - Если хотя бы одно математическое выражение истинно, тогда в переменную d будет записано число 1.
Если оба выражения не истинны, тогда будет записан 0.
В данном случае print напечатает 1.

d = or(2 == 2, 5 > 2)
print d


NOT - Если математическое выражение истинно, тогда в переменную d будет записано число 0.
Если выражение не истинно, тогда будет записан 1.
В данном случае print напечатает 1.

d = not(2 == 2)
print d

CMP - Если условие истинно, тогда в переменную d будет записано число 1.
Если условие не истинно, тогда будет записан 0.
В данном случае print напечатает 1.

d = cmp(3 != 2)
print d


BETWEEN - Если переменная b находится в диапазоне между двумя перемеными a и c, тогда в переменную d будет записано число 1.
Если условие не истинно, тогда будет записан 0.

a = 0
b = 5
c = 10
d = between(a,b,c)
print d
В данном случае print напечатает 1.

d = between(2,-2,10)
print d
В данном случае print напечатает 0.


Присвоение строк по условию.

Когда не были реализованы if c фигурными скобочками, ключи присваивались так.
Так даже проще без фигурных скобочек.

Цифры это ключи, а s90, s91, s91 это встроенные переменные.
s90 = 1, 2, 3, 4, 5
s91 = 11, 22, 31, 42, 52
s92 = 131, 322, 231, 242, 252

Здесь происходит присвоение строк.
Например если d равно 10, тогда строка s0 будет равна строке s90.

ks d == 10 s0 = s90
ks d == 11 s0 = s91
ks d == 12 s0 = s92

На обычном языке программирования кода будет больше на порядки


Встроенные функции для анимации.

В переменную names заносятся имена контроллеров.
Встроенная функция sigmoid задает как объекты будут двигаться,
их характер движения.

Пример.
sigmoid(0.6,24)

Числовое значение 0.6 задает характер движения.
Значение 24 это количество кадров в движении.
При значении 10 движение резкое.
При значение 0.6 движение плавное.
Чем больше число, тем жестче движение.
Движение объекта идет по Сигмоиде.

Сигмоида — это гладкая монотонная возрастающая нелинейная функция,
имеющая форму буквы «S», которая часто применяется для «сглаживания»
значений некоторой величины.

Функция timing или ti задает тайминг который был вычислен функциями sigmoid

frame - это встроенная переменная для удобного перемещения по тайм лайну в программе Blender.



Пример программы № 1


Анимация движения двух кубов

//С какого кадра начинаем
fs = 100
//На каком кадре заканчиваем
fe = 200
//Ставим защиту если надо,чтобы не
//перетереть ключи большие чем max
max = fe
//0.6 - чем больше число, тем жестче движение
//Без защиты первого и последнего кадра
s0 = sigmoid(0.6,fe-fs)

//Список имен контроллеров
s2 = Cube_1, Cube_2
names s2
//Задаем тайминг для всех контроллеров
//которые перечислены в names
timing t fs s0



Пример программы № 2


//Движение куба 1
fs = frame
fe = fs + 24
s0 = sigmoid(0.6,fe-fs)
s2 = Cube
names s2
timing t fs s0


//Движение куба 2
fs = frame
fe = fs + 24
s0 = sigmoid(2.6,fe-fs)
s2 = Cube
names s2
timing t fs s0


//Вращение головой персонажа
fs = frame
fe = fs + 24
s0 = sigmoid(6.1,fe-fs)
s2 = Empty.014
names s2
timing r fs s0


Пример программы № 3


//Вращение куба с 100 по 124 кадр с характером вращения 1.
//Характер движения занесен в переменную b.
a = 100
b = 1
s0 = sigmoid(b,24)
s2 = Cube
names s2
timing r a s0



Продолжение следует...



All rights reserved. CuprumLang. 2018 - 2023. bios.space@gmail.com Leonid Vitos