Проблема с арифметическими операциями c++

356
20 января 2018, 01:07

Доброго времени суток! Столкнулся (похоже) с какой-то низкоуровневой проблемой преобразования типов (или еще чего-то).

Есть тривиальная функция линейной интерполяции Лагранжа:

unsigned char mix(unsigned char x0, unsigned char x1, float position){
    // LOGICALLY must be something like (implementation with casts)...
    return x0 + (x1 - x0) * position;
}

Параметры x0, x1 всегда в пределах 0-255 Параметр position всегда в пределах 0.0-1.0

По факту как бы я не пытался сделать касты параметров и привидение типов внутри метода, чтобы добиться такой логики, как описана выше не получается. Кто-нибудь знает, в чем может быть проблема? Компилирую под MSVC2017. Среда Windows10x64, Little-endian

Добавлено: Похоже проблема шире, чем я предполагал изначально (судя по вашим ответам, спасибо за них). Вот ссылка на гитхаб на маленький проект, который демонстрирует проблему: https://github.com/elRadiance/altitudeMapVisualiser

Выходной файл bmp должен содержать карту высот с плавными переходами, а вместо этого содержит мусор. Если в функции интерполяции возвращать просто x0 или просто x1 - то все работает (но без переходов). В ином случае - мусор.

Желаемый результат (как тут, но с плавными переходами)

Актуальный результат (самое лучшее, чего пока удалось добиться)

Main class чтобы запустить:

#include "Visualiser.h"

int main() {
unsigned int width = 512;
unsigned int height = 512;

float* altitudes = new float[width * height];
float c;
for (int w = 0; w < width; w++) {
    c = (2.0f * w / width) - 1.0f;
    for (int h = 0; h < height; h++) {
        altitudes[w*height + h] = c;
    }
}
Visualiser::visualiseAltitudeMap("gggggggggg.bmp", width, height, altitudes);
delete(altitudes);
}

Спасибо заранее!

READ ALSO
Идентификатор printf не определён

Идентификатор printf не определён

Выполняю задание по алгоритмам компьютерной графикиВ самом начале возник очередной затуп, так как 2 printf в коде выделяются как неопределённые...

951
Вывод элементов из односвязного списка

Вывод элементов из односвязного списка

Создала линейный односвязный списокКак его вывести?

378
Как добавить физику в Java3d [требует правки]

Как добавить физику в Java3d [требует правки]

Всем приветЯ разрабатываю проект на языке программирование Java с использованием библеотеки Java3d

266