我正在尝试创建一个非常具体的测地曲面细分,但我无法在网上找到任何关于它的信息.
将二十面体的三角形细分为三角形贴片并将它们投影到球体上是正常的.但是,我注意到Geodesic Domes维基百科条目上的动画GIF似乎没有遵循这个方案.测地球通常包括大多数六边形三角形贴片的混合物,在原始二十面体的顶点处形成五边形贴片; 在大多数情况下,这些五边形连在一起; 也就是说,从一个五边形的中心沿直边延伸到另一个五边形的中心.然而,在维基百科动画中,一个五边形中心的边缘似乎与相邻五边形的中心不相交; 相反,它与另一个五边形的一侧相交.
我在哪里可以了解这个特定几何背后的数学?理想情况下,我想知道用于生成此类镶嵌的算法.
我对在尺寸为3或更高的球面上均匀分布N个点感兴趣。
更加具体:
我对以下内容不感兴趣:
满足这些条件的一种方法称为斐波那契晶格,但我只能在2d和3d中找到该方法的代码实现。
斐波纳契晶格(也称为斐波纳契螺旋)背后的方法是生成绕球体表面成螺旋形的一维线,以使该线所覆盖的表面积每转大致相同。然后,您可以丢掉均匀分布在螺旋上的N个点,它们将大致均匀地分布在球体的表面上。
在此答案中,有一个针对3个维度的python实现,可生成以下内容:
我想知道斐波那契螺旋是否可以扩展到大于3的尺寸,并在数学堆栈交换中发布了一个问题。令我惊讶的是,我收到了两个令人惊讶的答案,据我所知(因为我不完全理解所显示的数学)表明确实有可能将该方法扩展到N维。
不幸的是,我对所显示的数学知识还不够了解,无法将任何一个答案都转换成(伪)代码。我是一位经验丰富的计算机程序员,但是我的数学背景仅此而已。
我将复制我认为是以下答案之一最重要的部分(不幸的是,SO不支持mathjax,因此我必须复制为图像)
我遇到的上述困难:
在座的任何人都可以理解所涉及的数学知识,从而能够朝着链接斐波那契晶格问题的任一答案的伪代码实现取得进展?我知道完整的实施可能很困难,因此我对部分实施感到满意,该实施可以使我足够自己完成其余的工作。
为简化起见,我已经编写了一个函数,该函数将N个维度的球面坐标转换为笛卡尔坐标,因此该实现可以输出任意一个,因为我可以轻松进行转换。
另外,我看到一个答案为每个附加维使用下一个质数。我可以轻松地编写一个输出每个连续素数的函数,因此可以假定已经实现了。
如果未能在N个维度上实现斐波那契晶格,我很乐意接受满足上述约束的另一种方法。
是否有公式生成一组三角坐标,其顶点位于球体上?
我可能正在寻找与之类似的东西gluSphere.然而,我需要用特定颜色为不同的三角形着色,这样我似乎无法使用gluSphere.
另外:我确实理解gluSphere沿着具有相同经度和格度的线绘制边缘,这使得三角形在极点处与其在赤道处的尺寸相比较小.现在,如果这样的公式将生成三角形,使得它们的大小差异最小化,那将是很好的.
我正在尝试创建一个类似于此的形状,具有12个五边形的六边形,任意大小.
(图片来源)
唯一的问题是,我完全不知道生成它需要什么样的代码!
目标是能够在3D空间中获取一个点并将其转换为网格上的位置坐标,反之亦然,并获取网格位置并获取绘制网格的相关顶点.
我甚至不知道如何为此存储网格位置.3个五边形之间的每个"三部分"是否都有自己的2D坐标?
我很可能会使用C#,但我更感兴趣的是使用哪种算法以及它们如何工作的解释,而不是只给我一段代码的人.
algorithm geometry tiling hexagonal-tiles computational-geometry
我正在尝试制作一个球形爆发射线以检查碰撞,但是根据每条射线撞击的内容或位置发生特定的相互作用.因此,为什么我使用光线而不是更简单的东西,如OverlapSphere.
我正在寻找如何制作球体的原因是因为我可以使用相同的数学计算我的光线,让它们到达球体所在的顶点.但是我能找到制作球体的每一种方式都会让线条越来越接近极点,这很有意义,因为它很容易做到.但是你可以想象,它对我当前的项目没那么有用.
TL; DR: 如何制作具有等距顶点的球体?如果它的罚款不完全等距,它只需要非常接近.如果发生这种情况,如果你可以给出差异的多少,以及在哪里,如果适用,那将是很好的.
我试图在单位球体的表面上或多或少均匀地排列点.
我被告知虽然这个问题很难解决,但Fibonacci Lattices提供了一个非常好的解决方案.
我已经尝试了几天来关注链接文档中提供的非常简单的方法,但我根本无法让它看起来正确.
我正在使用javascript,我有一个对象数组e,每个对象都公开一个lat和lon参数.这是我用来排列球体上的点的函数:(现在假设点的数量总是奇数)
function arrangeEntries(e)
{
var p = e.length;
var N = (p - 1) / 2;
for (var i = -N; i <= N; i++)
{
e[i + N].lat = Math.asin((2 * i) / (2 * N + 1));
e[i + N].lon = mod(i, 1.618034) * 3.883222;
}
}
Run Code Online (Sandbox Code Playgroud)
同
function mod(a, b)
{
return a - Math.floor(a / b) * b;
}
Run Code Online (Sandbox Code Playgroud)
不同于文档中,我lat和lon …
我在几场比赛中看到了纹理良好的球,行星和其他球形物体,上次在不明飞行物:后果.如果你只是将纹理溅入纬度/经度作为你和w -coordinates你会得到很多丑陋的纹理扭曲到两极.
我认为自己是一种实现具有最小失真的球形地图的方法.通过三角形而不是正方形映射.但我不知道任何算法.如何为这样的球体生成顶点和纹理坐标?
此外,我没有看到从简单的扁平方形图生成完整球形贴图的方法.绘制这样的地图有没有直观的方法没有真正的麻烦?
但是,有没有其他算法来渲染没有或具有最小失真的球体?
光线跟踪和光栅化算法都很有趣.
我在球体的表面上有很多点.如何计算具有最大点密度的球体的面积/点?我需要这么快完成.如果这是一个正方形,例如我想我可以创建一个网格然后让点投票哪个部分的网格是最好的.我已经尝试将点变换为球面坐标,然后做一个网格,这两个都不能很好地工作,因为北极周围的点在球体上很近但在变换后很远.
谢谢
我正在尝试在 OpenGL 中程序生成一个充满星星的背景。
我采用的方法是创建一个带有立方体贴图纹理的天空盒。立方体贴图纹理的每一面基本上由一个 2048x2048 的黑色图像组成,其中随机选择的纹素设置为白色。结果如下:
我不确定从图像上看它有多明显,但是当在一个非常明显的盒子形状周围移动时,可以看出靠近盒子边缘的星星看起来更小而且更靠近。我怎样才能防止这种情况?我是否需要放弃天空盒方法并使用类似天空球的东西?
编辑:这是我将立方体贴图映射到天空的方式。
// Create and bind texture.
glGenTextures(1, &texture_);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, texture_);
for (unsigned int i = 0; i < 6; ++i) {
std::vector<std::uint8_t> image = generateTexture(TEXTURE_WIDTH, TEXTURE_HEIGHT);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, TEXTURE_WIDTH, TEXTURE_HEIGHT,
0, GL_RGB, GL_UNSIGNED_BYTE, image.data());
}
// Set texture parameters.
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
Run Code Online (Sandbox Code Playgroud)
下面是generateTexture函数的定义:
std::vector<std::uint8_t> Stars::generateTexture(GLsizei width, GLsizei height) {
std::vector<std::uint8_t> image(static_cast<std::size_t>(3 * width * height)); …Run Code Online (Sandbox Code Playgroud) 我一直试图在太阳系的openGL(使用JOGL)中实现3D动画到目前为止我有5个不同大小的行星,但我似乎有的问题是我无法在球体上添加地球纹理的地图可以任何人帮助我如何完成它?
这是我在Display方法中到目前为止的代码:
@Override
public void display(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
GLU glu = new GLU();
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
//make sure we are in model_view mode
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
glu.gluLookAt(10,20,20,0,3,0,0, 20, 0);
//gl.glMatrixMode(GL2.GL_PROJECTION);
//glu.gluPerspective(45,1,1,25);
//render ground plane
gl.glPushMatrix();
gl.glTranslatef(-10.75f, 3.0f, -1.0f);
gl.glColor3f(0.3f, 0.5f, 1f);
GLUquadric earth = glu.gluNewQuadric();
glu.gluQuadricDrawStyle(earth, GLU.GLU_FILL);
glu.gluQuadricNormals(earth, GLU.GLU_FLAT);
glu.gluQuadricOrientation(earth, GLU.GLU_OUTSIDE);
final float radius = 3.378f;
final int slices = 89;
final int stacks = 16;
glu.gluSphere(earth, radius, slices, stacks);
glu.gluDeleteQuadric(earth);
Texture earths;
try {
earths = TextureIO.newTexture(new File("earth.png"), …Run Code Online (Sandbox Code Playgroud) 美好的一天,
目前,我正在尝试将飞机弯曲到一个球体。我已经准备好尝试将Mercator投影与lla一起使用到efef。因此结果有所延缓,但它不像球形(半球形)。最成功的变体如下所示(更像是帐篷,而不是半球):
该帐篷的代码(pastebin)。我正在使用three.js进行渲染。
因此,我需要一些建议。我做错了什么?
我想构建一个观星应用程序。现在我已经构建了一个球体并用星图覆盖它(基于天体坐标)。(https://svs.gsfc.nasa.gov/cgi-bin/details.cgi?aid=3895)
现在我有一个 json 文件,其中包含来自 YBS 的明星目录。(也基于天体坐标)。(http://tdc-www.harvard.edu/catalogs/bsc5.html)
我想将数据与星图结合起来,希望每当我的相机节点转向那个地方时,地图都显示星座的名称。但我不知道如何将数据和领域结合起来。因为球体会因用户的纬度和时间而旋转。星体数据的坐标也必须改变。
有人有建议吗?
geometry ×5
math ×5
algorithm ×4
opengl ×3
astronomy ×1
c# ×1
c++ ×1
fibonacci ×1
graphics ×1
html5-canvas ×1
java ×1
javascript ×1
jogl ×1
mercator ×1
projection ×1
pseudocode ×1
raytracing ×1
swift ×1
tessellation ×1
textures ×1
tiling ×1