2D向量的数学计算

#### 2D向量的数学计算

这些代码摘抄自BLIZZARDINTERFACECODEVector2D.lua部分

-- 数学意义在于向量围成的面积  a × b = |a||b|sinθ
-- 几何上二维向量叉乘是没有意义的,这个实现返回的值是垂直于向量a与向量b平面的向量的模,在3D数学中,向量叉乘返回的应该是一个向量
-- https://stackoverflow.com/questions/243945/calculating-a-2d-vectors-cross-product
-- 这个实现并不"合理",It's a shorthand notation for a mathematical hack.
function Vector2D_Cross(leftX, leftY, rightX, rightY)
    return leftX * rightY - leftY * rightX;
end

-- a·b = |a||b|cosθ
function Vector2D_Dot(leftX, leftY, rightX, rightY)
    return leftX * rightX + leftY * rightY;
end

--向量模的平方
function Vector2D_GetLengthSquared(x, y)
    return Vector2D_Dot(x, y, x, y);
end

-- 向量的模,注意求平方根是一个消耗较大的操作,所以若是简单的比较两个向量的模的大小可用模的平方代替.
function Vector2D_GetLength(x, y)
    return sqrt(Vector2D_GetLengthSquared(x, y));
end

-- 单位向量
function Vector2D_Normalize(x, y)
    return Vector2D_DivideBy(Vector2D_GetLength(x, y), x, y);
end

-- 两个向量的夹角度:  tanθ = sinθ /cosθ;atan2(x,y) = atan(y/x)
function Vector2D_CalculateAngleBetween(leftX, leftY, rightX, rightY)
    return atan2(Vector2D_Cross(leftX, leftY, rightX, rightY), Vector2D_Dot(leftX, leftY, rightX, rightY));
end

-- 旋转弧度
function Vector2D_RotateDirection(rotationRadians, x, y)
    local cosValue = cos(rotationRadians);
    local sinValue = sin(rotationRadians);
    return x * cosValue - y * sinValue, x * sinValue + y * cosValue;
end

转载于:https://www.cnblogs.com/Fallever/p/11195368.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值