相关疑难解决方法(0)

计算n维弧形路径

我正在为CNC铣床实现驱动程序,而我在实现G代码弧命令时遇到了麻烦.

我已经找到了几个中点圆算法的实现,但它实际上并不是真的可用.

我发现中点圆算法的问题在于它是2D并且同时绘制所有八分圆,而我需要通过3D路径的连续步骤,由起点,终点和中心点给出.

我发现了一个很好的多维等效Bresenham的线绘算法使用浮点运算.绘制圆弧可能存在类似的事情吗?

我可以通过大量的思考和实验来改变这种算法,但是由于绘制弧线并不是一个未解决的问题,而且之前已经制造过数控机床,我想知道是否已经存在一个优雅的解决方案?

python algorithm math g-code geometric-arc

5
推荐指数
1
解决办法
570
查看次数

不变尺度几何

我正在编写一个网格编辑器,其中有操纵器,可以在其帮助下更改网格的顶点。任务是渲染具有恒定尺寸的操纵器,当更改相机和视口参数时,该尺寸不会改变。投影矩阵是透视矩阵。我将感谢您提供如何实现不变比例几何的想法。

opengl algorithm directx geometry

4
推荐指数
1
解决办法
268
查看次数

分解二维变换矩阵

所以,我有一个 Direct2D Matrix3x2F,我用它来存储几何上的转换。我希望这些转换是用户可编辑的,并且我不希望用户必须直接编辑矩阵。是否可以将 3x2 矩阵分解为缩放、旋转、倾斜和平移?

c# math direct2d

4
推荐指数
2
解决办法
4003
查看次数

旋转一组矢量

我试图将我采样的一组矢量旋转到三角形的法线

如果这是正确的,随机抽样的半球将与三角形对齐.

目前我在Z轴上生成它并尝试将所有样本旋转到三角形的法线.

但它似乎"刚刚关闭"

在此输入图像描述

glm::quat getQuat(glm::vec3 v1, glm::vec3 v2)
{

    glm::quat myQuat;
    float dot = glm::dot(v1, v2);
    if (dot != 1)
    {
        glm::vec3 aa = glm::normalize(glm::cross(v1, v2));
        float w = sqrt(glm::length(v1)*glm::length(v1) * glm::length(v2)*glm::length(v2)) + dot;
        myQuat.x = aa.x;
        myQuat.y = aa.y;
        myQuat.z = aa.z;
        myQuat.w = w;
    }
    return myQuat;
}
Run Code Online (Sandbox Code Playgroud)

我从本页底部提取的内容:http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors

然后我 :

glm::vec3 zaxis = glm::normalize( glm::vec3(0, 0, 1) );  // hardcoded but test orginal axis
glm::vec3 n1 = glm::normalize( glm::cross((p2 - p1), (p3 - …
Run Code Online (Sandbox Code Playgroud)

opengl math quaternions

3
推荐指数
1
解决办法
2299
查看次数

为什么相机默认面向z轴的负端?

我正在从这个scratchpixel学习openGL ,这里是透视项目矩阵章节的引用:

摄像机沿世界坐标系负z轴指向,这样当一个点从世界空间转换到摄像机空间(然后从摄像机空间转换到屏幕空间)时,如果该点位于世界坐标系的左侧y轴,它也会映射到摄像机坐标系y轴的左侧.换句话说,当世界坐标系x轴也指向右边时,我们需要摄像机坐标系的x轴指向右边; 并且唯一可以获得该配置的方法是让相机向下看负z轴.

我认为这与镜像有关?但是这个解释让我很困惑...为什么默认情况下相机的坐标与世界坐标不一致(就像我们在openGL中创建的每个其他3D对象一样)?我的意思是,我们需要使用变换矩阵来转换相机坐标(无论我们想要什么,负z设置,我们都可以模拟它)...为什么要这么麻烦?

opengl 3d graphics geometry projection-matrix

3
推荐指数
2
解决办法
4340
查看次数

找到垂直于另一个向量的向量的好方法?

生成垂直于向量的任意向量的好方法是什么?假设生成的向量应该是有效的(即除非给定向量是(0.0, 0.0, 0.0)- 这种情况的输出应该是error)?

我知道有无限组可能的向量(例如参见此处)。我想要的是对于任何输入向量来说都是严格且无错误的。

我尝试的是设置,这里pn是垂直向量:p[0] = 0.5*(n[0] + n[1]; p[1] = 0.5*(n[0] - n[1])然后求解点积方程来找到,但是当是p[2]时这是有缺陷的。目前我只能想到乏味地创建所有案例检查 - 但一定有更好、更优雅的解决方案吗?n[2]0

algorithm math

3
推荐指数
1
解决办法
6888
查看次数

我应该如何处理(变形)opengl中的4D对象?

我想尝试编写类似于4D玩具的游乐场,所以我开始学习opengl。
根据我目前的理解,人们将VBO和统一的转换矩阵用于大多数静态对象
(例如立方体,骨骼动画等,通常只涉及转换)。

我还听说,模型之间的变形也使用VBO来缓存两个模型,因为这两个模型都可以很好地定义并且不需要太多的中间步骤。

但是在上面提到的4D玩具中,物体会发生变形并被大量裁剪。
而且很可能没有定义的模型,并且两者之间有很多转换。
(现在可能是一个简单的正方形,一个尖刺的球在以后被切成两半)。
在这种情况下,每帧更新顶点VBO或顶点数组(我在另一个问题中看到)是合适的解决方案吗?

opengl graphics geometry rendering 4d

3
推荐指数
1
解决办法
1068
查看次数

如何使用 4d 转子

我正在尝试创建一个类似于Miegakure的 4D 环境。

我无法理解如何表示旋转。Miegakure 的创建者写了这篇小文章,解释了他为 4d 转子制作的课程。 http://marctenbosch.com/news/2011/05/4d-rotations-and-the-4d-equivalent-of-quaternions/

我怎样才能实现这个类的功能?特别是旋转矢量和其他转子的功能,并得到逆?

我将不胜感激一些伪代码示例。非常感谢任何麻烦回答的人。

math angle rotation 4d

3
推荐指数
2
解决办法
1274
查看次数

如何计算具有三角形面的网格的质心?

我想根据以下描述计算网格的新质心。但我不想使用 Blender 的内置函数来计算质心,如此处所述,因为它们似乎没有给我我期望获得的质心。首先,我想计算网格的网格质心的面(三角形)的中心。然后我需要计算面部面积。新的质心是网格面中心的平均值,按其面积加权。我如何在 Python 中执行此操作(但不一定使用 Blender 的 Python API)?

c++ python math 3d mesh

3
推荐指数
1
解决办法
5676
查看次数

使用 GLM(旋转)为 OpenGL 创建变换矩阵

原问题:

问题

我有一个单位立方体,我想转换它以连接两个点。我是 OpenGL 的新手,只知道线性代数的最基本部分。我试图模仿类似于极坐标的东西来连接点。当 Z 轴和另一个轴发生变化时,我当前的实现不起作用。我也尝试过mat = glm::lookAt(center, terminal, y_axis);,但我没有成功。

代码

这来自位于schedule_edge_update().

auto const initial = p1;
auto const terminal = p2;
auto const distance = glm::distance(initial, terminal);
auto const length = distance * 0.5f;
auto const center = (initial + terminal) / 2.f;
auto const rejection = terminal - initial;
auto const delta = glm::normalize(rejection);

auto mat = glm::mat4(1);

// translate
mat = glm::translate(mat, center);

// rotate
auto const phi_hyp = glm::length(glm::vec2(delta.x, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl trigonometry rotational-matrices glm-math

3
推荐指数
1
解决办法
1039
查看次数