Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Box2D(C+;+;)三角形形状故障区域断言_C++_Box2d_Polygon_Shape_Vertex - Fatal编程技术网

C++ Box2D(C+;+;)三角形形状故障区域断言

C++ Box2D(C+;+;)三角形形状故障区域断言,c++,box2d,polygon,shape,vertex,C++,Box2d,Polygon,Shape,Vertex,我正在Box2D(C++)中使用以下代码创建三角形多边形: b2FixtureDef fixtureDef; b2PolygonShape dynamicPolygon; b2Vec2 vertices[3]; vertices[0].Set(0, -1); vertices[1].Set(-1, 1); vertices[2].Set(1, 1); dynamicPolygon.Set(vertices, 3); fixtureDef.shape = &dynamicPolygon;

我正在Box2D(C++)中使用以下代码创建三角形多边形:

b2FixtureDef fixtureDef;
b2PolygonShape dynamicPolygon;
b2Vec2 vertices[3];
vertices[0].Set(0, -1);
vertices[1].Set(-1, 1);
vertices[2].Set(1, 1);
dynamicPolygon.Set(vertices, 3);
fixtureDef.shape = &dynamicPolygon;
但是,在运行此代码时,出现以下错误:

a.out: ./Box2D/Collision/Shapes/b2PolygonShape.cpp:127: b2Vec2 ComputeCentroid(const b2Vec2*, int32): Assertion `area > 1.19209289550781250000e-7F' failed.
面积似乎太小,但是,这些点应该形成一个正确的三角形吗


有什么想法吗?

我需要交换顶点1和2的值:

b2FixtureDef fixtureDef;
b2PolygonShape dynamicPolygon;
b2Vec2 vertices[3];
vertices[0].Set(0, -1);
vertices[1].Set(1, 1);
vertices[2].Set(-1, 1);
dynamicPolygon.Set(vertices, 3);
fixtureDef.shape = &dynamicPolygon;

此选项将顶点按逆时针顺序排列…

可能是因为用于计算面积的公式取决于顶点顺序。如果我们看不到代码很难说,但是考虑到错误消息以及您如何解决它,这似乎是原因。我认为您最初是顺时针的,但您必须逆时针放置它们。这是box2d对他们的期望。用户手册中的“多边形顶点以逆时针方向缠绕(CCW)的方式存储…”您不这么认为吗?在您的答案(第二个选项有效)中,第一个顶点位于y轴上,x轴下方,第二个顶点位于象限I,第三个顶点位于象限II。正如b2d所期望的,你们是以逆时针方向定义它们的,所以它是这样工作的。@PeterR啊,我现在明白了。我认为第一点高于其他2点,因为我认为-1更高(就像在屏幕上)。