Primitive Collision Detecting (4)

原创 2006年05月18日 01:21:00

 

Point In Cylinder

Point   :   P

Cylinder:   |(P – O) - ((P – O) • N) * N | <= R

  0 <= (P – O)• N <= L

 

Structure:  { V3d   O;

            float R;

            V3d   N;

            Float L;  }

                  

            V = P – O;

            dp = V • N;

            if ( dp < 0 || dp > L )     return Outside;

 

            T = V –dp * N;

 

            if ( T^2 > R^2 )            return Outside;

 

            return Inside;

 

Point In Cone

Point   :   P

Cone    :   |(P – O) – ((P – O) • N) * N| <= ((P – O) • N) * R / L

  0 <= (P – O)• N <= L

 

    The Data Structure of Cone is same as Cylinder.

                        

            V = P – O;

            dp = V • N;

            if ( dp < 0 || dp > L )     return Outside;

 

            T = V –dp * N;

 

            r = dp * R / L

          

            if ( T^2 > r^2 )            return Outside;

 

            return Inside;

 

 

Sphere & Cylinder

Sphere  :   | P – C | <= r

Cylinder:   |(P – O) - ((P – O) • N) * N | <= R

  0 <= (P – O)• N <= L

 

  OC = C – O;

            dp = OC • N

 

            if ( (dp > L + r) || (dp < -r) )      return No Intersection;

 

            T = OC - dp * N;

 if ( dp > L )

 {

f = sqrt( r^2 – (dp - L)^2 );

if ( T^2 > (R + f)^2 )              return No Intersection;

 

    return Intersectant;

 }

 else if ( dp >= 0 )

 {

if ( T^2 > (R + r)^2 )              return No Intersection;

 

    return Intersectant;

 }

 else

 {

f = sqrt( r^2 – dp^2 );

if ( T^2 > (R + f)^2 )              return No Intersection;

 

    return Intersectant;

 }

 

 

 

Line Segment & Cylinder

Line Seg:   P = P0 + t * V      t ∈ [0, 1]

Cylinder:   |(P – O) - ((P – O) • N) * N | <= R

  0 <= (P – O)• N <= L

 

 OP = P – O = P0 + t * V – O = (P0 – O) + t * V;

           dp = OP • N

           

           dp0 = (P0 – O)• N          t = 0

           if ( dp0 > L )      return No Intersection;

 

           dp1 = (P0 – O + V)• N      t = 1

           if ( dp1 < 0 )      return No Intersection;

 

|(P0 – O) + t * V – (((P0 – O) + t * V) • N) * N | <= R

|(P0 – O) + t * V – ((P0 – O) • N) * N – ((t * V) • N) * N | <= R

|(P0 – O) – ((P0 – O) • N) * N + t * V - t * (V • N) * N | <= R

|((P0 – O) – ((P0 – O) • N) * N) + t * (V - (V • N) * N) | <= R

 

F = (P0 – O) – ((P0 – O) • N) * N;

G = V - (V • N) * N;

 

G^2 * t^2 + 2 * (F • G) * t + F^2 – R^2 = 0;

A = G^2;

B = 2 * (F • G);

C = F^2 – R^2;

 

if ( A > 0 )    //V is not parallel to N

{

          Δ= B^2 – 4AC;

             if ( Δ < 0 )               return No Intersection;

 

          t = (-B ± sqrt(B^2 – 4AC)) / 2A;  

 

          t1 <= t2;

 

          if ( t2 < 0 || t1 > 1 )    return No Intersection;

 

          return Intersectant;

       }

 

if ( C <= 0 )                 return Intersectant;

 

return No Intersection;

版权声明:本文为博主原创文章,未经博主允许不得转载。

Primitive Collision Detecting (2)

1. 2D Point In 2D Fan 2. AABB & AABB 3. Point In AABB 4. Point In Convex Polyhedron
  • Unknowm
  • Unknowm
  • 2006年05月14日 23:39
  • 1195

Primitive Collision Detecting (3)

1. 2D Point In Triangle 2. 2D Point In Rectangle 3. Point In Circle Or Sphere 4. 2D Point In Ellipse...
  • Unknowm
  • Unknowm
  • 2006年05月15日 22:09
  • 1093

Primitive Collision Detecting (5)

1. Line Segment & Plane 2. Point On Plane 3. Sphere & Plane 4. Dynamic Sphere & Plane 5. Ellipsoid &...
  • Unknowm
  • Unknowm
  • 2006年05月23日 23:38
  • 1262

Primitive Collision Detecting (6)

1. Sphere & AABB 2. Sphere & OBB 3. Ellipsoid & AABB 4. Ellipsoid& OBB 5. Line Segment & Sphere
  • Unknowm
  • Unknowm
  • 2006年06月04日 21:50
  • 1191

Primitive Collision Detecting (1)

1. 2D Line Segment & 2D Line Segment 2. Sphere & Sphere, Static 3. Sphere & Sphere, Dynamic 4. Line ...
  • Unknowm
  • Unknowm
  • 2006年05月08日 22:51
  • 1207

什么是primitive主数据类型呢

primitive就是int,double,boolean这些数据类型,它们不是对象,只是内存里的几个字节空间而已。注意int是primitive,而Integer不是!Integer是一个类。jav...
  • mlgb456
  • mlgb456
  • 2012年11月07日 15:16
  • 4859

java基础primitive 类型

一.java的基本数据类型 的相关 java的8大主要类型 即primitive类型 对应的字节 和封装类,默认值 另外,引用也是primitive BigInteger 也算是封装类,但并不对应...
  • u013501457
  • u013501457
  • 2016年07月27日 20:32
  • 1331

Collider 与Collision的区别

Rigidbody  中文名称是刚体。所谓的刚体,简单点就是使物体具有物理属性或者性质。好比如,一个Cube(方块)加上Rigidbody之后具有重力效果,质量,阻力等物理属性。 下面是Rigidb...
  • f786587718
  • f786587718
  • 2015年08月30日 15:18
  • 3481

java 关于primitive数组 内存问题

1.我们知道java里new 出来的都是存放在堆里的。 问题是我们如下情况: int [] arr={1,2,3,4}, 我查看了一下深入java 虚拟机 测试了一下就没有new 直接 int[...
  • clam_clam
  • clam_clam
  • 2011年09月29日 14:40
  • 1924

Unity 3D 的 Collision碰撞 与 Trigger 触发的 区别

1) 想要讓程式判斷兩個物件有接觸,則雙方都必需要有Collider(碰撞器),  並且“正在動的一方”一定要有Rigidbody(剛體)才有效,另一方有沒有剛體無所謂。  ※也就是說,如果動的一...
  • plaxbsga
  • plaxbsga
  • 2014年08月07日 16:35
  • 1342
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Primitive Collision Detecting (4)
举报原因:
原因补充:

(最多只允许输入30个字)