亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? verlet.h.svn-base

?? 坦克大戰(zhàn)游戲完整全套源代碼
?? SVN-BASE
字號(hào):
#ifndef VERLET_H
#define VERLET_H

#include <cassert>
#include <vector>
#include <caPoint2d.h>
#include <caRect.h>
#include "common/utils.h"
namespace verlet
{
    using std::vector;
    using cAni::Point2f;
    using cAni::Rectf;

    class iShape;
    class iBody;
    class LinConstraint
    {
    public:
        void Update();
    protected:
        iBody *m_pxBodyA, *m_pxBodyB;
        float m_fRestLength;
    };
    class Contact
    {
    public:
        enum { eMaxContacts = 2 };

        iBody *m_pxBodies[2];
        Point2f m_xContacts[eMaxContacts];

        Contact()
        {
            Reset();
        }

        Contact(const Point2f &PA, const Point2f &PB, iBody *pxBodyA, iBody *pxBodyB)
        {
            //assert(PA.x != PB.x || PA.y != PB.y);
            m_pxBodies[0]  = pxBodyA;
            m_pxBodies[1]  = pxBodyB;
            m_xContacts[0] = PA;
            m_xContacts[1] = PB;
        }

        void Reset()
        {
            m_pxBodies[0] = m_pxBodies[1] = 0;
        }

        iBody *GetBody(int i)
        {
            return m_pxBodies[i];
        }
        Point2f &GetContact(int i)
        {
            return m_xContacts[i];
        }

        void ResolveCollision();
        void ResolveOverlap();
    };
    class Body;
    class StaticBody;
    class iBody
    {
    public:
        void SetShape(iShape *shape)
        {
            this->shape = shape;
        }
        iShape *GetShape()
        {
            return this->shape;
        }
        const iShape *GetShape() const
        {
            return this->shape;
        }
        float getOrientation() const
        {
            return orientation;
        }
        void setOrientation(float ori)
        {
            orientation = ori;
        }
        const Point2f &getPosition() const
        {
            return pos;
        }
        void setPosition(const Point2f &pos)
        {
            this->pos = pos;
        }
        virtual void Reset(const Point2f& xPosition, float fOrientation, float fMass)
        {
            pos = xPosition;
            orientation = fOrientation;
            fMass;
        }
        virtual size_t Collide(iBody& body, float dt, Contact *pxContacts, size_t numMaxContacts);
        virtual Point2f GetPointVelocity(const Point2f& P, float dt)
        {
            P, dt;
            return Point2f();
        }
        virtual void AddForce(const Point2f& F)
        {
            F;
        }
        virtual void AddTorque(float T)
        {
            T;
        }
        virtual void AddForce(const Point2f& F, const Point2f& P)
        {
            F, P;
        }
        virtual const Point2f &getVelocity() const
        {
            static Point2f zero;
            return zero;
        }
        virtual const float getAngVelocity() const
        {
            return 0.f;
        }
        virtual void Update(float dt)
        {
            dt;
        }
        virtual float getMass() const
        {
            return 0.0f;
        }
        virtual float getInvMass() const
        {
            return 0.0f;
        }
        virtual float getInvInertia() const
        {
            return 0.0f;
        }
        virtual void setAngVelocity(const float &av)
        {
            av;
        }
        virtual void setVelocity(const Point2f &vel)
        {
            vel;
        }
        virtual bool isStaticBody() const = 0;
    protected:
        iBody() : shape(0), orientation(0.0f)
        {
        }
        iShape *shape;
        Point2f pos;
        float orientation;
    };
    class Body : public iBody
    {
    public:
        void Reset(const Point2f& xPosition, float fOrientation, float fMass);

        void AddForce(const Point2f& F)
        {
            assert(F.Length() < 1e2);
            netForce += F;
        }
        void AddTorque(float T)
        {
            netTorque += T;
        }
        void AddForce(const Point2f& F, const Point2f& P)
        {
            assert(F.Length() < 1e2);
            netForce += F;
            netTorque += (P - pos) ^ F;
        }
        Point2f GetPointVelocity(const Point2f& P, float dt)
        {
            dt;

            Point2f D(P - pos);
            Point2f L(-D.y, D.x);

            return velocity + L * angVelocity;
        }
        
        void Update(float dt);
        const Point2f &getVelocity() const
        {
            return velocity;
        }
        void setVelocity(const Point2f &vel)
        {
            assert((vel - velocity).Length() < 1e5);
            velocity = vel;
        }
        const float getAngVelocity() const
        {
            return angVelocity;
        }
        void setAngVelocity(const float &av)
        {
            angVelocity = av;
        }
        float getMass() const
        {
            return mass;
        }
        float getInvMass() const
        {
            return invMass;
        }
        float getInertia() const
        {
            return inertia;
        }
        float getInvInertia() const
        {
            return invInertia;
        }
        virtual bool isStaticBody() const
        {
            return false;
        }
    protected:
        vector<LinConstraint> constraints;

        float mass;
        float invMass;

        Point2f velocity;
        float angVelocity; // angular velocity

        Point2f netForce;
        float netTorque;

        float inertia;
        float invInertia;
    };
    class StaticBody : public iBody
    {
    public:
        void Reset(const Point2f& xPosition, float fOrientation);
        virtual bool isStaticBody() const
        {
            return true;
        }
    };
    class BoxShape;
    class CircleShape;

#define DEFINE_SHAPE_POLYMOROHIC \
    virtual size_t collide(iShape &shape, float dt, Contact *pxContacts, size_t numMaxContacts) = 0; \
    virtual size_t collide(BoxShape &shape, float dt, Contact *pxContacts, size_t numMaxContacts) = 0; \
    virtual size_t collide(CircleShape &shape, float dt, Contact *pxContacts, size_t numMaxContacts) = 0;
    // end of define

#define IMPLEMENT_A_SHAPE_POLYMOROHIC(type) \
    virtual size_t collide(type &shape, float dt, Contact *pxContacts, size_t numMaxContacts) \
    { return verlet::collide(*this, shape, dt, pxContacts, numMaxContacts); }
    // end of define 

#define IMPLEMENT_SHAPE_POLYMOROHIC \
    IMPLEMENT_A_SHAPE_POLYMOROHIC(BoxShape) \
    IMPLEMENT_A_SHAPE_POLYMOROHIC(CircleShape) \
    virtual size_t collide(iShape &shape, float dt, Contact *pxContacts, size_t numMaxContacts) \
    { return shape.collide(*this, dt, pxContacts, numMaxContacts); }
    // end of define

    class iShape : public NoCopy
    {
    public:
        iShape(iBody &_body) : body(_body)
        {
        }
        virtual float GetInertiaMoment() const = 0;
        DEFINE_SHAPE_POLYMOROHIC;
        virtual void update(){}
        virtual Rectf GetBoundingBox() const = 0;

        iBody &body; // attached body
//        Point2f pos;
//        Point2f dir;
    };

    size_t collide(BoxShape &box1, BoxShape &box2, float dt, Contact *pxContacts, size_t numMaxContacts);
    size_t collide(CircleShape &circle, BoxShape &box, float dt, Contact *pxContacts, size_t numMaxContacts);
    inline size_t collide(BoxShape &box, CircleShape &circle, float dt, Contact *pxContacts, size_t numMaxContacts)
    {
        return collide(circle, box, dt, pxContacts, numMaxContacts);
    }
    size_t collide(CircleShape &circle1, CircleShape &circle2, float dt, Contact *pxContacts, size_t numMaxContacts);
    class BoxShape : public iShape
    {
    public:
        BoxShape(iBody &_body, const Point2f &_extents) : iShape(_body), extents(_extents)
        {

        }
        virtual float GetInertiaMoment() const
        {
            float fWidth  = extents.x * 2.0f;
            float fHeight = extents.y * 2.0f;

            return 1.0f / 12.0f * (fWidth * fWidth + fHeight * fHeight);
        }
        IMPLEMENT_SHAPE_POLYMOROHIC;
        virtual void update()
        {
            dir[0] = Point2f(cos(body.getOrientation()), sin(body.getOrientation()));
            dir[1] = Point2f(-dir[0].y, dir[0].x);
        }
        Rectf GetBoundingBox() const
        {
            Point2f p1 = dir[0] * extents.x;
            if (p1.x < 0)
                p1.x = -p1.x;
            if (p1.y < 0)
                p1.y = -p1.y;
            Point2f p2 = dir[1] * extents.y;
            if (p2.x < 0)
                p2.x = -p2.x;
            if (p2.y < 0)
                p2.y = -p2.y;
            Rectf r;
            r.rightBottom = p1 + p2;
            r.leftTop = - r.rightBottom;
            return r;
        }
        const Point2f &GetDir(int id) const
        {
            assert(id == 0 || id == 1);
            return dir[id];
        }
        const Point2f &GetExtents() const
        {
            return extents;
        }
        size_t FindSupportPoints(const Point2f& xAxis, Point2f* pxPoints) const
        {
            float f0 = dir[0] * xAxis;
            float f1 = dir[1] * xAxis;
            float s0 = sign(f0);
            float s1 = sign(f1);

            size_t numPoints = 0;
            pxPoints[numPoints++] = body.getPosition() - 
                dir[0] * extents.x * s0 - 
                dir[1] * extents.y * s1;

            if (fabs(f0) < 0.001f)
            {
                pxPoints[numPoints++] = pxPoints[0] + dir[0] * extents.x * s0 * 2.0f;
            }
            else if (fabs(f1) < 0.001f)
            {
                pxPoints[numPoints++] = pxPoints[0] + dir[1] * extents.y * s1 * 2.0f;
            }

            return numPoints;
        }
        void GetInterval(const Point2f& xAxis, float& min,  float& max) const
        {
            float p = body.getPosition() * xAxis;
            float r = fabs(dir[0] * xAxis) * extents.x + fabs(dir[1] * xAxis) * extents.y;

            min = p - r;
            max = p + r;
        }
    protected:
        Point2f extents;
        Point2f dir[2];
    };
    class CircleShape : public iShape
    {
    public:
        CircleShape(iBody &_body, float _radius) : iShape(_body), radius(_radius)
        {
        }

        virtual float GetInertiaMoment() const
        {
            return 2.0f / 5.0f * (radius * radius);
        }
        IMPLEMENT_SHAPE_POLYMOROHIC;
        Rectf GetBoundingBox() const
        {
            Rectf r;
            r.rightBottom = Point2f(radius, radius);
            r.leftTop = -r.rightBottom;
            return r;
        }
        float GetRadius() const
        {
            return radius;
        }
    protected:
        float radius;
    };
    /*
    class PolygonShape : public iShape
    {
    protected:
        vector<Point2f> vertices;
    };
    */
}

#endif//VERLET_H

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合九色综合97婷婷| 亚洲一区国产视频| 久久女同互慰一区二区三区| 欧美成人在线直播| 日韩一二三四区| 欧美一级高清大全免费观看| 91精品国产色综合久久不卡电影| 欧美日韩三级一区二区| 欧美日韩在线直播| 欧美精品丝袜久久久中文字幕| 欧美视频一区在线| 欧美视频一区二| 欧美日韩一本到| 91精品国产美女浴室洗澡无遮挡| 欧美久久久久免费| 日韩亚洲欧美一区| 久久尤物电影视频在线观看| 国产欧美日韩综合| 国产麻豆成人精品| 国产99久久久国产精品免费看| 国产suv精品一区二区三区| 国产999精品久久| av在线不卡免费看| 欧美在线免费播放| 日韩无一区二区| 欧美激情一区二区三区四区| 1024精品合集| 午夜av一区二区| 激情五月激情综合网| 国产91清纯白嫩初高中在线观看| 波多野结衣中文字幕一区二区三区| 91免费看`日韩一区二区| 欧美日韩黄色一区二区| 精品毛片乱码1区2区3区| 国产精品毛片久久久久久| 亚洲精选视频在线| 青青草国产成人99久久| 国产揄拍国内精品对白| 91农村精品一区二区在线| 欧美精品日韩一区| 中文字幕免费不卡| 亚洲成av人片www| 国产美女娇喘av呻吟久久| 91亚洲精品一区二区乱码| 7799精品视频| 中文字幕精品一区二区精品绿巨人 | 久久精品水蜜桃av综合天堂| 亚洲日本一区二区三区| 日本欧美久久久久免费播放网| 国产成人精品在线看| 欧美日韩亚洲国产综合| 久久新电视剧免费观看| 亚洲在线成人精品| 国产一区二区伦理片| 欧亚一区二区三区| 久久久久青草大香线综合精品| 亚洲美女偷拍久久| 国产自产高清不卡| 欧美三级视频在线播放| 国产偷国产偷精品高清尤物| 亚洲综合色噜噜狠狠| 国产一区二区三区免费看| 91电影在线观看| 久久久亚洲国产美女国产盗摄| 亚洲成人黄色小说| 成人黄色在线看| 欧美zozozo| 亚洲成人av资源| 91丨porny丨中文| 欧美精品一区二区三区蜜臀| 亚洲线精品一区二区三区 | 欧美一级黄色录像| 一区二区三区日韩精品| 国产精品99久| 欧美一区二区三区四区视频| 亚洲精品免费视频| www.亚洲人| 久久久久久一二三区| 日本少妇一区二区| 91福利在线导航| 亚洲色图色小说| 风流少妇一区二区| 欧美精品一区男女天堂| 日韩精品一卡二卡三卡四卡无卡| 色老头久久综合| 国产成人免费av在线| 日韩一区二区电影| 午夜亚洲国产au精品一区二区| 91香蕉视频污| 中文字幕亚洲精品在线观看| 大桥未久av一区二区三区中文| 欧美xxxxxxxxx| 久久精品噜噜噜成人av农村| 91精品国产91久久久久久一区二区 | 4438x成人网最大色成网站| 亚洲一二三区在线观看| 色噜噜狠狠成人中文综合| 综合激情成人伊人| 成人99免费视频| 国产精品久久三区| 不卡av免费在线观看| 国产精品美女久久久久高潮| 成人免费视频视频在线观看免费 | 国产精品久久久久三级| 国产成人高清视频| 国产亚洲自拍一区| 国产不卡在线视频| 国产精品久久免费看| 成人综合在线视频| 国产精品久久久久久久裸模| 风间由美中文字幕在线看视频国产欧美| 久久你懂得1024| 国产91富婆露脸刺激对白| 欧美国产日本视频| av电影天堂一区二区在线观看| 国产精品久久久久久一区二区三区| www.日韩在线| 亚洲精选视频免费看| 在线视频一区二区三区| 亚洲成av人片在线观看无码| 7777精品伊人久久久大香线蕉的| 日韩va亚洲va欧美va久久| 精品乱码亚洲一区二区不卡| 国产成人免费9x9x人网站视频| 国产精品久久精品日日| 欧美最猛性xxxxx直播| 奇米影视在线99精品| 欧美电影精品一区二区| 狠狠色综合色综合网络| 欧美高清在线一区二区| 色嗨嗨av一区二区三区| 亚洲成人综合在线| 精品91自产拍在线观看一区| 成人午夜伦理影院| 一区二区三区在线高清| 日韩欧美不卡一区| 成人免费的视频| 亚洲国产视频网站| 精品不卡在线视频| 91蝌蚪porny| 免费不卡在线视频| 国产日韩精品一区二区三区在线| 色伊人久久综合中文字幕| 蜜桃视频第一区免费观看| 国产免费观看久久| 欧美日韩一区精品| 国产大陆精品国产| 亚洲成人一二三| 久久久精品2019中文字幕之3| 色婷婷狠狠综合| 免费成人性网站| 国产精品国产三级国产aⅴ入口| 欧美日韩一区视频| 久久成人18免费观看| 亚洲乱码国产乱码精品精的特点| 欧美日韩国产乱码电影| 国产又粗又猛又爽又黄91精品| 欧美不卡一二三| 99re这里只有精品首页| 亚洲超碰精品一区二区| 久久久另类综合| 欧美一区二区在线观看| 国产精品99久久不卡二区| 樱桃国产成人精品视频| 欧美成人艳星乳罩| 欧美日韩亚洲综合在线| 国产精品1024| 午夜视频在线观看一区二区| 欧美日韩精品一区二区三区 | 亚洲美女偷拍久久| 884aa四虎影成人精品一区| 成人午夜激情影院| 在线观看日韩电影| 国产乱理伦片在线观看夜一区| 亚洲地区一二三色| 国产女人aaa级久久久级| 欧美区视频在线观看| 国产99精品在线观看| 日韩av一区二区三区四区| 亚洲视频在线观看一区| 欧美一区二区三区在线观看| 91日韩一区二区三区| 丝袜美腿亚洲综合| 亚洲另类在线制服丝袜| 26uuu国产一区二区三区| 欧美中文字幕一二三区视频| 97精品久久久午夜一区二区三区| 日本欧美大码aⅴ在线播放| 亚洲免费在线观看视频| 久久久美女艺术照精彩视频福利播放| 欧美一区二区私人影院日本| 国产盗摄精品一区二区三区在线| 午夜不卡av免费| 亚洲精品ww久久久久久p站| 国产精品情趣视频| 精品国产一区二区亚洲人成毛片| 欧美三级视频在线| 国产一区二区剧情av在线| 精品伊人久久久久7777人| 亚洲一级片在线观看|