Как я перевожу параболическим образом?

Также я рекомендую использовать утилита TraceTool, она идет с поддержкой JavaScript и очень удобна для контроля JS.

6
задан bpapa 11 December 2009 в 06:18
поделиться

4 ответа

Чтобы анимировать плавную кривую, вам нужно использовать CAKeyframeAnimation. В этот ответ я предоставляю код для комбинированной анимации, которая перемещает представление изображения по кривой, изменяя его размер и затемняя его. Соответствующая часть этого кода выглядит следующим образом:

// Set up path movement
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;

CGPoint endPoint = CGPointMake(480.0f - 30.0f, 40.0f);
CGMutablePathRef curvedPath = CGPathCreateMutable();
CGPathMoveToPoint(curvedPath, NULL, viewOrigin.x, viewOrigin.y);
CGPathAddCurveToPoint(curvedPath, NULL, endPoint.x, viewOrigin.y, endPoint.x, viewOrigin.y, endPoint.x, endPoint.y);
pathAnimation.path = curvedPath;
CGPathRelease(curvedPath);

Это создает кривую с двумя контрольными точками, одна в исходной точке обзора, а другая в правом верхнем углу дисплея (в альбомном режиме). Подробнее о построении траекторий см. В Quartz 2D Programming Guide или в Руководстве по программированию типов и времени анимации .

Чтобы использовать эту анимацию, вы: мне нужно будет добавить его на уровень вашего представления, используя что-то вроде следующего:

[imageViewForAnimation.layer addAnimation:pathAnimation forKey:@"curveAnimation"];
25
ответ дан 8 December 2019 в 03:27
поделиться

Эстетично способ анимации по кривым - использовать сплайны . Они математически просты и эффективны в вычислительном отношении. Сплайн наименьшего порядка, который мог бы решить параболическую арку, - это квадратичный сплайн.

3
ответ дан 8 December 2019 в 03:27
поделиться

Похоже, вам нужно периодически устанавливать свойство преобразования на CGAffineTransformTranslate , созданное с параметрами x, y, выбранными по параболе (сделайте то, что предложил Рассел, чтобы получить x из y или наоборот).

Если вы также хотите, чтобы ваша машина вращалась, когда она изгибается по параболе (будет выглядеть более реалистично), вам понадобится CGAffineTransormRotate . Определите угол на основе наклона параболы в точке, в которой вы в данный момент рисуете. Вам понадобится функция atan () для вычисления угла по уклону. Похоже на боль, надеюсь, есть более простой способ.

Я действительно не знаю, о чем говорю, я только что прочитал эту запись в блоге: Демистификация CGAffineTransform .

0
ответ дан 8 December 2019 в 03:27
поделиться

Я думаю, что предложение TokenMacGuy об использовании сплайнов - хорошее. Опять же, я не знаю, о чем говорю, но, возможно, это даст вам некоторые идеи.

Это должна быть точная парабола или будет работать приближение? То, что вы хотите сделать, очень похоже на рендеринг текста по кривой (см. Также снимок экрана ). Эта серия постов кажется неплохим практическим руководством - объясняет расчеты углов и прочее. Каждый «персонаж» соответствует позиции вашего автомобиля. Параметрирование длины дуги гарантирует, что ваша скорость постоянна.

Что касается того, как это сделать на iPhone ... понятия не имею.

0
ответ дан 8 December 2019 в 03:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: