Anatoly
Anatoly

Reputation: 25

Cone normal vector

I have cone->p (vertex of the cone), cone->orient (axis vector), cone->k (half-angle tangent), cone->minm and cone->maxm (2 height values, for cone caps). Also I have point intersection which is on the cone. How do I find the cone (side surface) normal vector at intersection point using only these parameters?

Upvotes: 0

Views: 1704

Answers (2)

Futurologist
Futurologist

Reputation: 1914

If I is the intersection point on the cone's surface and you know its coordinates, and P is the vertex of the cone, whose coordinates you also know, then this is enough:

Normal = (axis x PI) x PI
Normal = Normal / norm(Normal)

where axis is the vector aligned with the axis of the cone.

Upvotes: 2

MBo
MBo

Reputation: 80187

Сame up with simpler method:

Find distance Dis from intersection point I to base P

Make axis orientation vector of length

D = Dis * sqrt(1+k^2)

and make point on axis at this distance

A = P + Normalized(Orient) * D

Now

Normal = I - A

enter image description here


Old answer:
Make orthogonal projection of point I (intersection) onto cone axis using vector `IP = I - P' and scalar (dot) product:

AxProj = P + Orient * dot(IP, Orient) / dot(Orient, Orient) 

Vector from AxPr to I (perpendicular to axis):

AxPerp = I - AxProj

Vector, tangent to cone surface, using vector product:

T = IP x AxPerp

Vector, normal to cone surface:

N = T x IP

enter image description here

Upvotes: 1

Related Questions