草庐IT

Geometry

全部标签

c++ - 几何变换

任务是当我们在3维空间中有一条线段(我们有两端的坐标)并且我们有信息作为angle,ratio和金额。我们的工作是给我们接下来的几个线段(few=amount),它们的起点在我们的第一条线段的末尾(我们知道哪个是这条线的终点和起点)并且被旋转在这里第一行的俯View(行在中心(这个黑点)):Amount最大为100。Angle为180*。这就是我所做的:Sx,Sy,Sz-起始坐标x,y,z-结束坐标floatsiny=sqrt((x-Sx)*(x-Sx)+(z-Sz)*(z-Sz))/S->korona[lvl-1]->l;floatcosy=(y-Sy)/S->korona[lvl-

c++ - 模板对象的类访问者模式

我正在尝试制作一个用于学术目的的自定义碰撞引擎,但我被困在一个通用的C++编程问题上我已经拥有所有可以正常工作的几何形状,并且对于问题的范围,我有这个功能:templateboolintersects(constlhs_geometry&lhs,constrhs_geometry&rhs){//returnstrueifdoesobjectsintersects//(assumethisfunctionsworksperfectlywitheverygeometrytype)}我还需要完成以下类templateclasscollidable_object{public:explicit

c++ - 不完整的球体 OpenGL

我想使用VBO绘制一个球体作为顶点、颜色和UV坐标作为纹理。我的问题是球体没有“封闭”,原点有一个洞。我知道这是因为我的代码取决于每个顶点之间的(1/segments)距离;我正在处理segments=40。我知道,如果我提高那个值,洞会变低,但程序会变慢。不知道有没有办法在不增加变量的情况下消除这个洞。代码如下:for(inti=0;i这是我的输出: 最佳答案 我不认为这是一个洞。您绘制了一个线段太多,并导致它在南极绘制额外的三角形,纹理环绕:for(inti=0;i在第一个循环迭代中,i=0,角度将小于-0.5*pi,导致图片中

c++ - Boost::geometry 查询返回索引

我想要一个类,它使用boost::geometry::index::rtree作为空间索引器。只有这个类应该知道boost,所以我使用这样的东西:structVeryImportantInfo{...floatx;floaty;}classCatalogue{...public:std::vector>FindIn(floatx1,floatx2,floaty1,floaty2);protected:usingpoint=bg::model::point;usingvalue=std::pair>;usingbox=bg::model::box;boost::geometry::ind

c++ - boost::geometry 测量点到多边形环的最大/最小距离的最有效方法

我一直在程序中使用boost::geometry库,主要用于处理多边形对象。我现在正在尝试优化我的代码以更好地缩放更大的多边形。我的一个函数检查给定多边形和给定点(通常在多边形内部)点和多边形外环之间的最小和最大距离。我通过在多边形边上循环来实现:polygonpol;pointmyPoint;doublemin=9999999,max=0;for(autoit1=boost::begin(bg::exterior_ring(pol));it1!=boost::end(bg::exterior_ring(pol));++it1){doubledistance=bg::distance(

c++ - 圆形碰撞后的新速度

在圆形台球table上,台球以某个速度v1与台球的边界碰撞。这种碰撞检测如下:doubles=sqrt((p.x-a)*(p.x-a)+(p.y-b)*(p.y-b));if(sr)//pointliesoutsidecircle//movepointbackontocircle(Ialreadyhavethatpart)//calculatenewvelocity现在如何计算碰撞后的新速度v2,使得入射角=反射角(弹性碰撞)?PS:台球由具有速度vectorv(x,y)的点p(x,y)表示。模拟没有摩擦。 最佳答案 假设您正在制作

c++ - 使用单调多边形的多边形三角剖分

我有一个没有孔的简单多边形,需要将其三角化为凸多边形以便在物理引擎中使用,而且我可以使用这些凸多边形通过三角形带进行渲染。This维基百科文章展示了如何使用单调多边形对多边形进行三角剖分。它提供了它如何工作的简短描述,但不够详细,我无法理解。这种方法似乎非常适合我的需要,FlashDemo它链接到表明该算法非常适合我的需要。我一直在谷歌上搜索以寻找对算法的更好解释,但我只能找到进行三角剖分的库或源代码。我更愿意学习它是如何工作的并编写我自己的方法,但如果我需要使用预先编写的库,它就必须这样做。任何人都可以提供解释或资源来说明我如何了解这种三角测量的工作原理吗?

c++ - 如何继承boost::geometry::model::point?

我想继承bg::model::point用自己的功能扩展它。*point*s应存储在rtree中.以下最小示例无法编译我的派生点(boost1.54,gcc4.7.2)的用法:#include#include#include#include#include#includenamespacebg=boost::geometry;namespacebgi=boost::geometry::index;namespaceboost{namespacegeometry{namespaceindex{//apparentlynecessary:templatestructindexable>{t

c++ - 获取单个平面中两个 vector 之间角度的有效方法?

如果我知道vector的x和z值将相同,因此我只关心测量y平面差异的“垂直”角度,与计算点积相比,是否有更有效的方法来做到这一点?我目前使用点积法的代码如下:floata_mag=a.magnitude();floatb_mag=b.magnitude();floatab_dot=a.dot(b);floatc=ab_dot/(a_mag*b_mag);//clampdtofromgoingbeyond+/-1asacos(+1/-1)resultsininfinityif(c>1.0f){c=1.0;}elseif(c我希望能够去掉这些平方根 最佳答案

c++ - 旋转一个 vector 以达到与另一个 vector 的正交性

我有2个vector(V1{x1,y1,z1},V2{x2,y2,z2}),我想围绕旋转V1X轴、Y轴和Z轴与V2平行。我想找到3个旋转角度。我可以使用任何通用公式来找到它们吗? 最佳答案 我会这样做:A=V1xV2;//Crossproduct,thisgivestheaxisofrotationsin_angle=length(A)/(|V1||V2|);//sineoftheanglebetweenvectorsangle=asin(sin_angle);A_n=normalize(A);现在您可以使用角度和A_n构建四元数。