向量运用

可能有错。

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值