作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个充满顶点位置的 vector 3 (x,y,z) 一维动态数组。
如何返回给定 x 和 z 坐标处的 y 值?
编辑:抱歉缺少详细信息。
我正在使用 C++,在 Visual Studio 2008 中编译。vector 是一个 vector 类,存储 3 个定义 x、y 和 z 变量的浮点值,用于位置。
就像Vector3 *array;
array = new Vector3[100];
许多位置值被添加到数组中。
当您访问数组的一个成员以获得特定值时,它就像
数组[0].y
但是我想找到一个对应于特定x和z的y值
喜欢
GetY(float x, float z)
...
返回y;
最佳答案
我想你有类似的东西
struct Vec3D{
float x, y, z;
};
Vec3D vec3d_arr[20];
然后,为了得到你想要的,你需要遍历数组。
float GetYforXZ(Vec3D* arr, unsigned int length, float x_val, float z_val){
for(unsigned i=0; i < length; ++i){
if(arr[i].x == x_val && arr[i].z == z_val)
return arr[i].y;
}
}
int main(){
Vec3D arr[20];
// init arr
float y = GetYforXZ(arr,20,15.4f,23.3f);
}
编辑:关于您的评论:
#include <map>
#include <math>
using namespace std;
struct Vec3D{
float x, y, z;
};
const float float_eps = 1e-5;
struct float_wrapper{
float _value;
float_wrapper()
: _value(0.0f) {}
float_wrapper& operator=(float f){
_value = f;
return *this;
}
operator float() const{
return _value;
}
};
bool operator==(float_wrapper const& lhs, float_wrapper const& rhs){
float tmp = fabs(lhs._value - rhs._value);
return tmp < float_eps && tmp >= 0;
}
bool operator<(float_wrapper const& lhs, float_wrapper const& rhs){
return lhs._value < rhs._value;
}
typedef map< float_wrapper,float_wrapper > zy_map;
typedef map< float_wrapper,zy_map > xzy_map;
void init_vertex_mapping(xzy_map& a_map, Vec3D* arr, size_t length){
for(size_t i=0; i < length; ++i){
Vec3D& vertex = arr[i];
zy_map& zy = a_map[vertex.x];
zy[vertex.z] = vertex.y;
}
}
int main(){
xzy_map vertex_map;
Vec3D vertex_array[100] = { {0,0,0},{0,0,0},{0,0,0},{-3.14f,42.0f,-13.37f},{0,0,0} };
init_vertex_mapping(vertex_map, vertex_array, 100);
float y = vertex_map[-3.14f][-13.37f];
}
尽管我忘记了一个问题是 float
的不准确性,所以您可能会遇到 map 问题。如果你这样做,请回来评论。 :)
编辑:添加了一个更安全的版本,使用 float_wrapper
。
关于c++ - 如何从 vector 3 一维数组返回 y 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009374/
我是一名优秀的程序员,十分优秀!