Re: Digest for iphonedevcampua@googlegroups.com - 2 Messages in 1 Topic

0 views
Skip to first unread message

Denis Mazourick

unread,
Sep 10, 2010, 6:04:11 PM9/10/10
to iphoned...@googlegroups.com
Ну нет... Я с Саньком не согласен - кривые Безье, это они.... Т.е. ничего крутого нету.... Если нам надо задать передвижение объекта по плавной кривой без специфики взмахов крыльев бабочки, без физики - это самый простой способ. И! Кстати, никакой разницы - делаем ли мы это под иФон или под крутую граф.станцию.

2010/9/10 <iphonedevca...@googlegroups.com>

Group: http://groups.google.com/group/iphonedevcampua/topics

    "Виталик Белодед" <iero...@gmail.com> Sep 09 01:22PM -0700 ^
     
    Вот уж не знаю как там в этом гейском cocos2d, а вот в суровом
    пацанском си-плюс-плюсе это можно реализовать через массив опорных
    точек для кривых Безье, разбитый на пары/тройки/n-ки и подставленные в
    соответствующие уравнения кривых безье. Это чтоб движение плавное
    получилось. Ну а ежели уж совсем через, пардон, жопу делать, с
    ломаными вместо кривых, то можно просто умножая dt на разницу значений
    между двумя опорными точками.
     

     

    Санёк <bud...@gmail.com> Sep 09 11:25PM +0300 ^
     
    нет, конечно ломаные сюда никак не пойдут, а Безье конечно круто, но если
    нужно сделать штук 20 разных петель, то заколупаюсь я высчитывать что там
    куда

     

--
You received this message because you are subscribed to the Google Groups "iPhoneDevCamp Ukraine" group.
To post to this group, send email to iphoned...@googlegroups.com.
To unsubscribe from this group, send email to iphonedevcamp...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/iphonedevcampua?hl=en.

Санёк

unread,
Sep 11, 2010, 3:03:45 AM9/11/10
to iphoned...@googlegroups.com
Ну давайте предположим, что нашей бабочке нужно проделать такой вот путь http://imm.io/1h0i (представим, что это плавные линии :)) С кривыми Безъе это нужно сидеть, вычислять координаты... а если у нас таких бабочек будет 10 и с разными траекториями? Неужели все так сложно?

wicharek

unread,
Sep 12, 2010, 4:35:06 PM9/12/10
to iPhoneDevCamp Ukraine
Как вариант. Нарисовать кривую в любом векторном графическом
редакторе, сохранить в SVG, немного раздуплиться с форматом (это XML,
если чё) и достать оттуда цифры.

On Sep 11, 10:03 am, Санёк <budd...@gmail.com> wrote:
> Ну давайте предположим, что нашей бабочке нужно проделать такой вот путьhttp://imm.io/1h0i(представим, что это плавные линии :)) С кривыми Безъе

Vladimir Pouzanov

unread,
Sep 12, 2010, 4:49:48 PM9/12/10
to iphoned...@googlegroups.com
Ну так в SVG те же кривые Безье, нет?

2010/9/12 wicharek <wich...@gmail.com>:

> --
> You received this message because you are subscribed to the Google Groups "iPhoneDevCamp Ukraine" group.
> To post to this group, send email to iphoned...@googlegroups.com.
> To unsubscribe from this group, send email to iphonedevcamp...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/iphonedevcampua?hl=en.
>
>

--
Sincerely,
Vladimir "Farcaller" Pouzanov
http://farcaller.net/

Виталик Белодед

unread,
Sep 12, 2010, 7:12:43 AM9/12/10
to iPhoneDevCamp Ukraine
Да ничего самому высчитывать не надо, да и без черного пояса по матану
тоже можно обойтись - нужно всего лишь подставить ключевые точки в
уравнение кривой. Само уравнение можно посмотреть в википедии. Я,
собсна, в свое время так и сделал.

Вот так это делается для передвижения объекта от одной точки (p0) к
другой(p2). p1 - промежуточное значение. Если хочется большей
плавности - можно использовать уравнения больших порядков, только там
промежуточных точек, да и вычислений побольше будет.

template <typename TargetType>
class NHTransformationBezierSquare : public NHTransformationSingle {
protected:
TargetType p0, p1, p2;
TargetType *destination;

float totalTime;
float timeElapsed;
public:
NHTransformationBezierSquare(TargetType *theDestination, const
TargetType& pnt1, const TargetType& pnt2, float duration) :
NHTransformationSingle(duration) {
destination = theDestination;
p0 = *destination;
p1 = pnt1;
p2 = pnt2;
timeElapsed = 0;
totalTime = duration;
};
protected:
virtual void transform(float dt) {
timeElapsed += dt;
float t = timeElapsed/totalTime;
float oneMinT = 1 - t;
*destination = p0*(oneMinT*oneMinT) + p1*(2*t*oneMinT) + p2*(t*t);
};
void finalize() {
//*destination = finalValue;
};
protected:
~NHTransformationBezierSquare() {};
};

template <typename TargetType>
class NHTransformationBezierCube : public NHTransformationSingle {
protected:
TargetType p0, p1, p2, p3;
TargetType *destination;

float totalTime;
float timeElapsed;
public:
NHTransformationBezierCube(TargetType *theDestination, const
TargetType& pnt1, const TargetType& pnt2, const TargetType& pnt3,
float duration) : NHTransformationSingle(duration) {
destination = theDestination;
p0 = *destination;
p1 = pnt1;
p2 = pnt2;
p3 = pnt3;
timeElapsed = 0;
totalTime = duration;
};
protected:
virtual void transform(float dt) {
timeElapsed += dt;
float t = timeElapsed/totalTime;
float oneMinT = 1 - t;
*destination = p0*(oneMinT*oneMinT*oneMinT) +
p1*(3*t*oneMinT*oneMinT) + p2*(3*t*t*oneMinT)+ p3*(t*t*t);
};
void finalize() {
//*destination = finalValue;
};
protected:
~NHTransformationBezierCube() {};
};

On 11 сен, 10:03, Санёк <budd...@gmail.com> wrote:
> Ну давайте предположим, что нашей бабочке нужно проделать такой вот путьhttp://imm.io/1h0i(представим, что это плавные линии :)) С кривыми Безъе

Reply all
Reply to author
Forward
0 new messages