我得到了一个平面的三个参数,但我需要确保它们定义一个平面。是否有一种数学方法可以从参数a
,b
,c
和d
检查该等式是否适合平面?
答案 0 :(得分:2)
一般平面由等式
给出ax + by + cz = d
有效平面是指存在满足上述等式的非空的适当子集ℝ 3 的平面。也就是说,存在一组能够满足的点( x , y , z )∈ℝ 3 方程式中,ℝ 3 中还有其他一点不能满足它。
只要( a 2 + b 2 + c < sup> 2 )&gt; 0,当 a , b 和 c 中的至少一个非零时,将发生这种情况。因此,您需要做的就是检查 a , b 和 c 中的至少一个是非零。
答案 1 :(得分:0)
这可能会帮助您解决问题。它可能不会直接回答您的问题,但可能会导致这样的答案。在我的一个较旧的数学库中,我确实有一个涉及3D空间中的平面的类。这个类确实使用了另一个我有Vector3的类,其中我不会在这里展示,但是你可以在任何Vector类中找到大多数用于数学的常用函数和操作。
平面类
#ifndef PLANE_H
#define PLANE_H
#include "stdafx.h"
#include "Core.h"
// General Equation Of A Plane
//
// --- Ax + By + Cz + D = 0 ---
//
class Plane {
public:
bool _bOk;
private:
Vector3 _v3Point;
Vector3 _v3Normal;
public:
inline Plane();
inline Plane( Vector3 v3Point, Vector3 v3Normal );
inline Plane( Vector3 v3Point1, Vector3 v3Point2, Vector3 v3Point3 );
~Plane();
inline Vector3 GetNormal();
}; // Plane
// -----------------------------------------------------------------------
// Plane()
// Constructor - Set Plane To Be Horizontal At Origin With Normal In +Y
inline Plane::Plane() {
_v3Point = Vector3( 0.0f, 0.0f, 0.0f );
_v3Normal = Vector3( 0.0f, 1.0f, 0.0f );
_bOk = true;
} // Plane
// -----------------------------------------------------------------------
// Plane()
// Constructor - Set Plane To Given Point And Normal
inline Plane::Plane( Vector3 v3Point, Vector3 v3Normal ) {
_v3Point = v3Point;
_v3Normal = v3Normal;
if ( v3Normal.IsZero() ) {
_bOk = false;
return;
}
_bOk = true;
_v3Normal.Normalize();
} // Plane
// -----------------------------------------------------------------------
// Plane()
// Constructor - Define A Plane Given Three Points
inline Plane::Plane( Vector3 v3Point1, Vector3 v3Point2, Vector3 v3Point3) {
_v3Point = v3Point1;
// Get Two Vectors From The Given Points
Vector3 v3Vector1;
Vector3 v3Vector2;
v3Vector1 = v3Point3 - v3Point2;
v3Vector2 = v3Point1 - v3Point2;
// Get Normal By Crossing The Two Vectors
_v3Normal = v3Vector1.Cross( v3Vector2 );
if ( _v3Normal.IsZero() ) {
_bOk = false;
}
_bOk = true;
_v3Normal.Normalize();
} // Plane
// -----------------------------------------------------------------------
// GetNormal()
// Return The Normal To The Plane
inline Vector3 Plane::GetNormal() {
return _v3Normal;
} // Plane
#endif // PLANE_H
希望这可能会给你一些见解。