Кто будет читать комментации, автор пропустил довольно важный момент про индексирование в массиве. Границы массива НЕ проверяются во время выполнения. Чтение за пределами границ массива вернет 0 или "" в случае целочисленного или строкового массива. Сейчас компилятор не выдаёт предупреждений если вы укажете индекс больше длины массива, это может совпадать с вашими ожиданими или нет, но логику программы изменить сможет. А так же запись за границами массива изменит размер массива, например начальный размер массива был 5, а потом мы обращаемся к 99 элементу и присваиваем новое значение, array[99] = 42, его размер изменится и станет 100, а новые записи будут установлены в 0 или "". Читайте господа почаще хелп.
Спасибо большое за дополнения. В этом плане жаль что в VEX нет кортежей (которые не изменить прямым обращением). Да, я согласен, это все просто не выучить, да и не рационально это, намного лучше понять... и иногда лучше перечитывать и тестить самому.
@@pscale вообще тут хорошо бы просто перезрузить оператор [] чтобы во время индексации этот оператор и чекал баунды, но имеем, что имеем. И в VEX так же есть 2 вспомогательные функции getcomp и setcomp которые делают тоже самое, что и оператор [], что вообще никак не помогает. Поэтому я делал такую обёртку: перегружал свою функцию get для разных типов и потом подключал хидер когда это было нужно. Тоже самое можно сделать и для set когда нужно явно устанавливать значение по правильному индексу. #define GET(type) \ function ##type get(##type array[]; int idx){ \ if(!isvalidindex(array, idx)){ \ error("index out of bounds: the len is %d but the index is %d", len(array), idx); \ } \ return array[idx]; \ } GET(int) GET(float) GET(string) int xs[] = {0, 1, 2}; float fs[] = {1.3, 2.3, 3.4}; string ss[] = {"red", "green", "blue"}; i@integer = get(xs, 1); // i@integer2 = get(xs, 100); Error! f@flt = get(fs, 2); s@str = get(ss, 0);
Привет, мог бы ты объяснить зачем определять вектор tan1, если в результате получаем tan который направлен в противоположную сторону? Ведь вектор tan тоже без отклонений. Почему его нельзя использовать?
Приветствую! Да я проверял, можно. Я обычно всегда для подобных целей воссоздаю прообраз системы координат от нормалей и тангенсов...возможно перемудрил. А так любой перпендикуляр к нормали по сути тангенс и им можно мерять отклонения.
Шикарно!!!
Супер!!!
Друг ты хорош, постоянно выкладываешь видео с малым количеством пдп, подписался, рви пределы дальше
Спасибо большое! У меня пока есть возможность поучиться, помоделить что хочу, пописать скриптики и поделиться конечно)
Супер, теория и пояснения . Благодарю!
Дядь, хороша теория, продолжай делать🔥
Кто будет читать комментации, автор пропустил довольно важный момент про индексирование в массиве.
Границы массива НЕ проверяются во время выполнения. Чтение за пределами границ массива вернет 0 или "" в случае целочисленного или строкового массива. Сейчас компилятор не выдаёт предупреждений если вы укажете индекс больше длины массива, это может совпадать с вашими ожиданими или нет, но логику программы изменить сможет.
А так же запись за границами массива изменит размер массива, например начальный размер массива был 5, а потом мы обращаемся к 99 элементу и присваиваем новое значение, array[99] = 42, его размер изменится и станет 100, а новые записи будут установлены в 0 или "".
Читайте господа почаще хелп.
Спасибо большое за дополнения. В этом плане жаль что в VEX нет кортежей (которые не изменить прямым обращением). Да, я согласен, это все просто не выучить, да и не рационально это, намного лучше понять... и иногда лучше перечитывать и тестить самому.
@@pscale вообще тут хорошо бы просто перезрузить оператор [] чтобы во время индексации этот оператор и чекал баунды, но имеем, что имеем. И в VEX так же есть 2 вспомогательные функции getcomp и setcomp которые делают тоже самое, что и оператор [], что вообще никак не помогает.
Поэтому я делал такую обёртку: перегружал свою функцию get для разных типов и потом подключал хидер когда это было нужно. Тоже самое можно сделать и для set когда нужно явно устанавливать значение по правильному индексу.
#define GET(type) \
function ##type get(##type array[]; int idx){ \
if(!isvalidindex(array, idx)){ \
error("index out of bounds: the len is %d but the index is %d", len(array), idx); \
} \
return array[idx]; \
}
GET(int)
GET(float)
GET(string)
int xs[] = {0, 1, 2};
float fs[] = {1.3, 2.3, 3.4};
string ss[] = {"red", "green", "blue"};
i@integer = get(xs, 1);
// i@integer2 = get(xs, 100); Error!
f@flt = get(fs, 2);
s@str = get(ss, 0);
срочно надо все задублировать на рутубе
В процессе.
Привет, мог бы ты объяснить зачем определять вектор tan1, если в результате получаем tan который направлен в противоположную сторону? Ведь вектор tan тоже без отклонений. Почему его нельзя использовать?
Приветствую! Да я проверял, можно. Я обычно всегда для подобных целей воссоздаю прообраз системы координат от нормалей и тангенсов...возможно перемудрил. А так любой перпендикуляр к нормали по сути тангенс и им можно мерять отклонения.