vcg.vertex.Normal3d

vcg.vertex.Normal3d用于表示3D模型中每个顶点的法向量。该类是VCG库中的一个辅助类,用于处理三角网格模型数据。

属性

vcg.vertex.Normal3d具有以下属性:

  • x: 法向量在x轴方向的分量,类型为double
  • y: 法向量在y轴方向的分量,类型为double
  • z: 法向量在z轴方向的分量,类型为double

方法

vcg.vertex.Normal3d具有以下方法:

  • Normal3d(): 默认构造函数,创建零向量
  • Normal3d(double x, double y, double z): 创建指定方向的法向量
  • Normal3d(const Normal3d &n): 复制构造函数,创建给定法向量的副本
  • const Normal3d &operator = (const Normal3d &rhs): 传递引用的赋值运算符,将本向量设置为给定向量的副本
  • Normal3d operator + (const Normal3d &rhs) const: 向量加法运算符,返回两个向量相加的结果
  • Normal3d operator - (const Normal3d &rhs) const: 向量减法运算符,返回两个向量相减的结果
  • Normal3d operator - () const: 向量负号运算符,返回向量的相反向量
  • Normal3d operator * (double s) const: 向量数乘运算符,返回标量与向量的乘积
  • double Dot(const Normal3d &rhs) const: 向量点积运算符,返回两个向量的点积
  • Normal3d& Normalize(): 向量归一化,将向量标准化为单位向量
  • Normal3d& operator += (const Normal3d &rhs): 使用传递引用的向量加法运算符,将向量加上给定向量的结果
  • Normal3d& operator -= (const Normal3d &rhs): 使用传递引用的向量减法运算符,将向量减去给定向量的结果
  • Normal3d& operator *= (double s): 使用传递引用的向量乘法运算符,将向量乘以标量的结果

示例代码

以下示例展示了如何使用vcg.vertex.Normal3d类创建、复制和使用三维法向量。

#include <vcg/complex/complex.h>
#include <vcg/simplex/vertexplus/base.h>
#include <vcg/math/base.h>
#include <iostream>

using namespace vcg;

// 定义3D顶点类型
class MyVertex : public VertexSimp1  <MyVertex,vertex::Coord3d,vertex::Normal3d> {};

// 示例程序
int main() {
    MyVertex v0;
    v0.P() = Point3d(0.0, 0.0, 0.0); // 设置顶点坐标 
    v0.N() = Normal3d(0.0, 1.0, 0.0); // 设置顶点法向量

    MyVertex v1;
    v1.P() = Point3d(1.0, 0.0, 0.0);
    v1.N() = Normal3d(1.0, 0.0, 0.0);

    Normal3d n = v0.N() + v1.N();  // 计算两个法向量的和
    std::cout << "Sum of normals: (" << n.x << ", " << n.y << ", " << n.z << ")" << std::endl;

    Normal3d normalized = n.Normalize(); // 归一化法向量
    std::cout << "Normalized normal: (" << normalized.x << ", " << normalized.y << ", " << normalized.z << ")" << std::endl;

    return 0;
}

该程序创建两个顶点,为每个顶点设置坐标和法向量,并计算这两个法向量的和。最后,它归一化了和向量,并输出了结果。 输出应该如下所示:

Sum of normals: (1, 1, 0)
Normalized normal: (0.707107, 0.707107, 0)