开发者

How to get the plane out of a arbitrary collection of points?

开发者 https://www.devze.com 2022-12-10 21:58 出处:网络
I\'ve got a arbitrary collection of 3d points, i know they\'re coplanar,开发者_高级运维 but how do i calculate that plane? Take any three distinct points, and form a triangle of non-zero area. Compute

I've got a arbitrary collection of 3d points, i know they're coplanar,开发者_高级运维 but how do i calculate that plane?


Take any three distinct points, and form a triangle of non-zero area. Compute the cross product of two of the triangle's sides. That gives you the plane's normal, and you can use the common point as a point on the plane.

A point on a plane plus a normal defines a plane.


If they're not all planar, calculate the coefficients of the plane using a least squares fit.

The equation for a plane is Ax + By + Cz = D, so plug in your points and solve for the four unknown coefficients.

UPDATE: Just curious - how do you "know" that all the points are in the same plane? What makes you so certain?


Assuming that they are co-planar, pick three points, and try this:

http://www.jtaylor1142001.net/calcjat/Solutions/VPlanes/VP3Pts.htm


Because any three non-colinear points define a plane, a possible answer is...

Simply grab the first three points that are not colinear.


Another way to define a plane is a function from two parameters to a point. If you have three points A,B,C, then the function f(i,j) = A + (B-A)i + (C-A)j covers all the points on the plane.

Depending on your application it may be useful to normalise the b = (B-A) and c = (C-A) vectors to be perpendicular and of unit length. Unit length is easy.

In order to make them perpendicular, first normalise b, then take the dot product of b and c. This is the amount the the c vector points in the same direction as b, so substract this from c. c = c - (b.c)b Finally normalise c (i.e. divide by it's length)

0

精彩评论

暂无评论...
验证码 换一张
取 消