向量运用

来源:互联网 发布:数据库银行管理er图 编辑:程序博客网 时间:2024/05/28 17:08

可能有错。

1.判断点在线段上

×乘。先判断特殊情况 水平和垂直,再判断它是否共线。

    local p = cc.p( 40, 71)    local lineA = cc.p(20,50)    local lineB = cc.p(40, 70)    local pa =  cc.pSub(p,lineA)    local ab = cc.pSub(lineB,lineA)    local dir1 = false    if (p.x >= lineA.x and p.x <=lineB.x) and (p.y >= lineA.y and p.y <= lineB.y) then      dir1 = true    end    print("dir1",dir1)    if cc.pCross(pa,ab) == 0 and dir1 then        print("在。")    end


2.不规则物体反弹



 local rect1 = line:getBoundingBox()         local rect2 = cicleSprite:getBoundingBox()        local cy = math.tan(deg) * 532.87 + 532.87        print("当前坐标为",cy)         rect1.y = cy +cicleSprite:getContentSize().height / 2         local isco = cc.rectIntersectsRect(rect1,rect2)        if isco then           if self.cc == nil then         self.cc = cc.Sprite:create("res/Player.png")         self:addChild(self.cc)        print("坐标Y为",rect2.x)       self.cc:setPosition(rect2.x,cy)        end          local zs = cc.pSub(cc.p(0,480),cc.p(display.cx+500,480))          local cx = cc.p(zs.y,-zs.x)          guiyihua_ = cc.pNormalize(cc.p(cx.x ,cx.y))--单位向量n           -- 求投影向量N。N = (-s.n)n            m_x = - (vec_s.x * guiyihua_.x + vec_s.y * guiyihua_.y) * guiyihua_.x             m_y = - (vec_s.x * guiyihua_.x + vec_s.y * guiyihua_.y) * guiyihua_.y           -- 画图可知 由公式 向量: s + m = t ,m + t = f--->>f = 2t - s            m2 = cc.pAdd(cc.p(vec_s.x,vec_s.y),cc.p(m_x,m_y))            fx = - vec_s.x + 2 * m2.x            fy = - vec_s.y + 2 * m2.y       print("fx",fx)          vec_s.x = fx            vec_s.y = fy            cicleSprite:setPosition(cicleSprite:getPositionX() + vec_s.x * dt * 2 ,cicleSprite:getPositionY() + vec_s.y * dt * 2)  


0 0
原创粉丝点击