c++将向量归一化为二重
c++ normalize a vector to a double?
我正试图遵循一个代数方程,并将其转换为c++。
我被困在:
Calculate the radius as r = ||dp||
其中dp是矢量,并且:
dp = (dx,dy)
根据我在谷歌上的搜索,r=||dp||中的竖线意味着我需要对向量进行归一化。
我有:
std::vector<double> dpVector;
dpVector.push_back(dx);
dpVector.push_back(dy);
我应该如何规范化它,使它返回一个双精度为"r"?
||dp||
是向量dp的欧氏范数。查看此链接以获得更完整的解释:
https://en.wikipedia.org/wiki/Euclidean_distance
欧氏范数的计算如下:||dp|| = sqrt(dp.dp)
,其中。表示点积。
在C++中,这相当于||dp|| = std::sqrt(dx*dx + dy*dy)
。如果dp有更多的维度,那么最好使用线性代数库来计算点积。
归一化向量是长度为1的向量,如果您正在寻找长度,这不是您想要的。计算长度是规范化向量的第一步,但我认为不需要最后一步!
要计算长度,你需要毕达哥拉斯定理。我不打算进行全面的描述,但基本上你要取两边的平方根。
换句话说,把dx和dy相乘,加在一起,然后把结果平方根。
r = std::sqrt(dx*dx + dy*dy);
如果你真的想归一化向量,那么最后一步你所做的就是把dx和dy都除以r。这得到了一个长度为1的单位向量。
您可能正在寻找欧几里得范数,它是向量的几何长度和标量值。
double r = std::sqrt(dx*dx + dy*dy);
与此相反,向量的归一化表示相同的方向,其长度(其欧氏范数;))设置为1。这又是一个矢量。
固定维向量对象(尤其是低维向量对象)有助于将其自身表示为类类型。
一个简单的例子:
namespace wse
{
struct v2d { double x, y; };
inline double dot(v2d const &a, v2d const &b)
{
return a.x*b.x + a.y*b.y;
}
inline double len(v2d const &v) { return std::sqrt(dot(v,v)); }
}
// ...
wse::v2d dp{2.4, 3.4};
// ... Euclidean norm:
auto r = len(dp);
// Normalized vector
wse::v2d normalized_dp{dp.x/r, dp.y/r};
相关文章:
- 我在二维向量中是否正确分配了内存
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何将整数字符串转换为整数的二维向量?
- 如何使用擦除和迭代器来删除二维向量中的项目
- 如何在二维向量c++中迭代col
- 如何在C++中将.csv文件的元素存储到二维向量中?
- std::vector::clear()ing 二维向量线程的内部向量安全吗?
- 在我为我的二维向量提供第一个值后控制台关闭
- 以C++输出二维向量
- 在 c++ 中赋值给二维向量
- 在二维向量的每一列中查找最大值
- 类对象初始化的二维向量
- 有没有办法像python:np.concatenate([x,y,z],axis=1)中那样沿着列连接三个二维向量C++
- 我如何在二维向量中存储一些数组
- 我可以push_back矩形形状到继承矩形形状的类的二维向量中吗?
- 二维向量的迭代器
- 最小/最大整数和二重
- 在 STL 中,如何交换二维向量
- 对二重向量的向量进行排序
- c++将向量归一化为二重