# 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
• 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
• 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
• 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
• 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
• 2006年05月08日 22:51
• 1207

## 什么是primitive主数据类型呢

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

## java基础primitive 类型

• u013501457
• 2016年07月27日 20:32
• 1331

## Collider 与Collision的区别

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

## java 关于primitive数组 内存问题

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

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

1) 想要讓程式判斷兩個物件有接觸，則雙方都必需要有Collider（碰撞器）， 　並且“正在動的一方”一定要有Rigidbody（剛體）才有效，另一方有沒有剛體無所謂。 　※也就是說，如果動的一...
• plaxbsga
• 2014年08月07日 16:35
• 1342

举报原因： 您举报文章：Primitive Collision Detecting (4) 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)