您的位置:首页 > 健康 > 养生 > 免费建立国外网站_烟台app开发公司_百度指数预测_福建搜索引擎优化

免费建立国外网站_烟台app开发公司_百度指数预测_福建搜索引擎优化

2025/4/14 18:02:18 来源:https://blog.csdn.net/five50/article/details/144354056  浏览:    关键词:免费建立国外网站_烟台app开发公司_百度指数预测_福建搜索引擎优化
免费建立国外网站_烟台app开发公司_百度指数预测_福建搜索引擎优化
--线与圆的碰撞
function LineToCircle(linePoint1,linePoint2,circlePos,radius)--这里需要分成两种情况,一种是线段两边的点是否在圆内--如果点到半径的距离if PointToCircle(linePoint1,circlePos,radius) thenreturn trueendif PointToCircle(linePoint2,circlePos,radius) thenreturn trueend--寻找圆心最近的点local lineVec = {x= (linePoint2.x - linePoint1.x) , y = (linePoint2.y - linePoint1.y)}local pointToLinePoint1 = {x= (circlePos.x - linePoint1.x) , y = (circlePos.y - linePoint1.y)}local lineLength = math.sqrt(lineVec.x * lineVec.x  + lineVec.y * lineVec.y)--点乘向量公式 相当于 lineLength * pointLinePoint1Length * cos角度local dot = lineVec.x  * pointToLinePoint1.x +  lineVec.y * pointToLinePoint1.y--这里就是pointLinePoint1Length * cos角度 及为lineVec 的投影长度,温馨提示pointLinePoint1ToLine可能为正负值 取决于向量的夹角的cos值--相当于到线段的投影比例local pointLinePoint1ToLine =  dot / lineLengthlocal closestX = linePoint1.x + pointLinePoint1ToLine * (linePoint2.x - linePoint1.x)local closestY = linePoint1.y + pointLinePoint1ToLine * (linePoint2.y - linePoint1.y)local isInLine = PointToLine({ x = closestX,y =  closestY} , linePoint1, linePoint2)--如果点不在线上面(就是相当于他是在延长线 ) 直接returnfalseif not isInLine thenreturn false;end--点跟圆的碰撞local result = PointToCircle({ x = closestX,y =  closestY},circlePos,radius)return result
end
--点与直线的碰撞
function PointToLine(point , linePoint1, linePoint2)--思想点与线两边线段的距离跟线的距离的判断,相等就是在同一直线local line1 = math.sqrt((linePoint1.x - point.x) * (linePoint1.x - point.x) + (linePoint1.y - point.y)* (linePoint1.y - point.y))local line2 = math.sqrt((linePoint2.x - point.x) * (linePoint2.x - point.x) + (linePoint2.y - point.y)* (linePoint2.y - point.y))local line = math.sqrt((linePoint2.x - linePoint1.x) * (linePoint2.x - linePoint1.x) + (linePoint2.y - linePoint1.y)* (linePoint2.y - linePoint1.y))return (line1 + line2) == line
end
--点跟圆是否碰撞
function PointToCircle (point,circlePos,radius)local sqr2  = (point.x - circlePos.x) * (point.x - circlePos.x) + (point.y - circlePos.y) * (point.y - circlePos.y)return radius * radius >= sqr2
end

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com