gpt4 book ai didi

c++ - 物理 vector 表示

转载 作者:行者123 更新时间:2023-11-30 04:24:17 27 4
gpt4 key购买 nike

我有两个 3d 物理 vector ,带有 (x,y,z) 和方向。我想对它们做一些操作。但我有一些问题:

  • 我应该如何在 C++ 中表示这个 vector ?换句话说,我在下面写了类,但我不知道如何表示其中的方向?

     class vector_ {
    float x,y,z ;
    }
  • 如何计算两个 vector 的加法? image

最佳答案

您应该为 3D vector 类提供一些内容:

  1. 默认构造
  2. 从组件构建
  3. 访问单个组件(也可能在非笛卡尔表示中)
  4. vector - vector 加减法
  5. 标量乘法或“缩放”<​​/li>
  6. vector - vector 标量或 dot product
  7. vector-vector vector 或cross product
  8. “幅度”或“长度”

项目编号 6 允许您获得两个 vector 之间的角度,这可能会为您提供您在问题中提到的“方向”。通常将加法、减法、乘法和除法作为非成员运算符 +、-、*/ 提供。但是,对于 vector ,至少有两个常用的乘法运算(第 6 项和第 7 项)是不同的,并且具有不同的返回值。所以它们通常作为非成员函数提供。通常还提供上述某些操作的“增量”版本(+=-=*= 用于标量乘法。所以,你的 vector 类可能看起来像这样:

namespace geom 
{ //
class Vector3D
{
public:
Vector3D() : x(0),y(0),z(0) {}
Vector3D(float x,float y, float z) : x_(x), y_(y), z_(z) {}
float x() { return x_; } // similarly for y() and z()
Vector3D& operator +=(const Vector3D& rhs)
{
x_ += rhs.x_;
y_ += rhs.y_;
z_ += rhs.z_;
return *this;

}
Vector3D& operator -=(const Vector3D& rhs)
{
// similar to above
}
template <typename Scalar>
Vector3D& operator *=(const Scalar& scalar)
{
x_ *+ scalar;
// similar for y_ and z_
return *this;
}
private:
float x_, y_, z_:
};

和一些非成员函数:

namespace geom 
{
Vector3D operator + (const Vector3D& lhs, const Vector3D& rhs)
{
return Vector3D( lhs.x() + rhs.x(), lhs.y() + rhs.y(), lhs.z() + rhs.z() );

}
// similarly for operator -

template <typename Scalar>
Vector3D operator*(const Scalar& scalar, const Vector3D& vect)
{
return Vector(scalar*vect.x(), scalar*vect.y(), scalar*vect.z());
}

template <typename Scalar>
Vector3D operator*(const Vector3D& vect, const Scalar& scalar)
{
return scalar*vect;
}

float dot(const Vector3D& lhs, const Vector3D& rhs) { /* implement dot product */ }

Vector3D cross(const Vector3D& lhs, const Vector3D& rhs) { /* implement cross product */ }
} // namespace geom

关于c++ - 物理 vector 表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12872981/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com