Я использую сторонний объект «ротатор», который обеспечивает плавное, случайное вращение вдоль поверхности сферы. Вращатель используется для управления камерой (см. Rotator.h / c в исходном коде для xscreensaver ).
Выход ротатора - широта и долгота.
Я хочу, чтобы камера оставалась выше "экватора" - таким образом, ограничиваясь полушарием.
Я бы предпочел не изменять сам ротатор. Таким образом, я мог бы взять вывод широты и использовать его абсолютное значение. Однако плавное движение ротатора по экватору не приведет к плавному движению камеры: оно подпрыгнет.
Полагаю, я мог бы масштабировать выходную широту ротатора от его текущего диапазона до моего целевого диапазона: например, f (lat) = (lat + 1) / 2 отобразит диапазон (0, 1) в (0,5, 1). То есть сопоставить весь «глобус» с северным полушарием. Движение все равно будет плавным. Но то, что вращатель вращал как «южный полюс», стало бы «экватором» для моей камеры. Не приведет ли это к странному движению? Может быть, разрывы? Я не уверен.
Есть ли другой способ плавно отобразить сферу (широту и долготу) на полусферу?
Обновление:
Спасибо за ваше внимание и ответы. Несколько человек попросили разъяснений по поводу «гладкой». Я имею в виду не рывок: небольшое изменение скорости вращения должно быть сопоставлено с небольшим изменением скорости камеры. Если бы я просто взял абсолютное значение широты, нулевое изменение скорости ротатора при его пересечении экватором привело бы к резкому изменению скорости движения камеры (например, отскок).
IIRC это эквивалентно требованию, чтобы первая производная скорости была непрерывной. Непрерывная вторая производная может быть хорошей, но я не думаю, что это важно.