一道面试题, 某游戏公司的

tiantiangame 2010-04-16 08:59:23
加精
用最简单, 最快速的方法计算出下面这个圆形是否和正方形相交。

3D坐标系 原点(0.0,0.0,0.0)
圆形:
半径r = 3.0
圆心o = (*.*, 0.0, *.*)

正方形:
4个角坐标
1:(*.*, 0.0, *.*)
2:(*.*, 0.0, *.*)
3:(*.*, 0.0, *.*)
4:(*.*, 0.0, *.*)


这题实际上是考的游戏中算法的一个应用, 我想了好久都没有合适的简单高效的算法.

...全文
15852 400 打赏 收藏 转发到动态 举报
写回复
用AI写文章
400 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljc0861 2012-08-02
  • 打赏
  • 举报
回复
看了一遍不怎么懂
dzy2316 2011-11-18
  • 打赏
  • 举报
回复
只要判断圆心与正方形每个边的中点是否有一个大于半径,一个小于半径就行了。
hunanrenathit 2010-05-06
  • 打赏
  • 举报
回复
那要整个3D空间干什么,直接就平面几何
a165461 2010-05-06
  • 打赏
  • 举报
回复
假设圆心的坐标为(0,0),正方形的中心坐标为(x,y),圆的半径为r,正方形的边长为a.
正方形与心距离有3个条件
条件1:sqrt(x^2+y^2) <= a/2 + r 如果小于则必定相交,等于可能相切
条件2:sqrt(x^2+y^2) > sqr(2)*a/2 + r 必定不相交
条件3:如果1,2都不满足,那么求圆心于正方形中心相交的相交直线是否相交,如相交,则必定相交,否则,不相交
piqio379 2010-05-03
  • 打赏
  • 举报
回复
搞错了,应该是:
假设圆心的坐标为(0,0),正方形的中心坐标为(x,y),圆的半径为r,正方形的边长为a.
1.当x=0或y=0时,
sqrt(x^2+y^2)<=r+a/2;
2.当|y/x|=1时
sqrt(x^2+y^2)<=r+sqrt(2)*a/2;
3.否则
sqrt(x^2+y^2)<=
r*sin(45°-arctan(y/x)+arcsin(sqrt(2)*a/2*sin(45°-arctan(y/x))/r))/sin(45°-arctan(y/x))
则相交
antimatterworld 2010-05-03
  • 打赏
  • 举报
回复
x + 2y + 3Z + 4 = 0
4x + 3y +2Z + 1 = 0
这2个面相交的直线方程是
x = t + 2
y = - 2t - 3
z = t
(x、y、z、t属于任意实数集)
这类问题就是一看挺难,再一看没啥难的...
G_cofa 2010-05-03
  • 打赏
  • 举报
回复
内接圆,外接圆。
antimatterworld 2010-05-03
  • 打赏
  • 举报
回复
[Quote=引用 391 楼 fengxunyu 的回复:]

如果是异面相交就有点纠结了。
[/Quote]

面的方程可以用ax+by+cz+d=0的形式表示
异面相交的问题可以转换成如下方程组:
a1x + b1y + c1z + d1 = 0
a2x + b2y + c2z + d2 = 0
当然具体x、y、z是无法得到具体数值的。
只需把x、y、z表示成关于参数t的映射即可。
所得结果即表示3D空间中的直线。

俺也是学了点3D数学的基本知识,皮毛的很~~
韬哥~~ 2010-05-03
  • 打赏
  • 举报
回复
如果是异面相交就有点纠结了。
kosl90 2010-05-03
  • 打赏
  • 举报
回复
先求出正方形的中心点的坐标,然后看正方形中心到圆心的距离d与正方形中心到其中一个点的距离s
1. d=r+s相交
2. d>r+s不相交
3. r-d>=s>0相交
4. 0<r-d<s不相交

大概就这样吧,也许有错
liu13chao 2010-05-02
  • 打赏
  • 举报
回复
太难了
codeferever 2010-05-02
  • 打赏
  • 举报
回复
这个题目初中的,平面内两个闭合的图形,有五种情况:
1、相离
2、相切(这里有两种情形)
3、相交
4、内切
5、内含



songfei5201314 2010-05-02
  • 打赏
  • 举报
回复
有项目管理经验的.NET开发的朋友,可以加上限500人的QQ群28720769,一起交流。
piqio379 2010-05-02
  • 打赏
  • 举报
回复
假设圆心的坐标为(0,0),正方形的中心坐标为(x,y),圆的半径为r,正方形的边长为a.
sqrt(x^2+y^2)<=
r*sin(45°-arctan(y/x)+arcsin(sqrt(2)*a/2*sin(45°-arctan(y/x))/r))/sin(45°-arctan(y/x))
则相交
piqio379 2010-05-02
  • 打赏
  • 举报
回复
假设圆心的坐标为(0,0),正方形的中心坐标为(x,y),圆的半径为r,正方形的边长为a.
sqrt(x^2+y^2)<=
r*sin(45-arctan(y/x)+arcsin(sqrt(2)*a/2*sin(45-arctan(y/x))/r))/sin(45-arctan(y/x))
则相交
老青蛙嘎嘎嘎 2010-04-30
  • 打赏
  • 举报
回复
看看 路过 拿分
cool_naruto 2010-04-30
  • 打赏
  • 举报
回复
数据结构与算法 欢迎广大菜鸟与高手,只要热情对的好学者 群号:109089557
cool_naruto 2010-04-30
  • 打赏
  • 举报
回复
数据结构与算法 欢迎广大菜鸟与高手,只要热情对的好学者
wsbd10086 2010-04-29
  • 打赏
  • 举报
回复
1.矩形与圆相交首先考虑矩形与圆相切的情况。
2.有条件1可以得到一个圆角矩形
3.用函数表示2中的圆角矩形,可以分为9块图形,分别为题设中的矩形(第一块),第一块矩形周围4块矩形(5块),4块四分之一的圆角(9块)。
4.最后转换成,圆的中心是否在这9块图形中。

求优化- -
  • 打赏
  • 举报
回复
方法很不错!!!!
加载更多回复(373)

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧