Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.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++ 构建一个金字塔/圆锥体阵列_C++_Arrays_2d - Fatal编程技术网

C++ 构建一个金字塔/圆锥体阵列

C++ 构建一个金字塔/圆锥体阵列,c++,arrays,2d,C++,Arrays,2d,我正在做一个项目,需要用适当的值填充二维数组的单元格,以便构建两个形状,一个金字塔和一个圆锥体。我将非常感谢任何对实现这个算法的帮助。基本上,我需要传递2D数组的x和y坐标,函数应该在这些坐标处返回正确的高度值。最小高度为0,最大高度为100。 我的函数具有以下原型: float getPyramidHeight(int x, int y) { } float getConeHeight(int x, int y) { } 基本上,我有两

我正在做一个项目,需要用适当的值填充二维数组的单元格,以便构建两个形状,一个金字塔和一个圆锥体。我将非常感谢任何对实现这个算法的帮助。基本上,我需要传递2D数组的x和y坐标,函数应该在这些坐标处返回正确的高度值。最小高度为0,最大高度为100。

我的函数具有以下原型:

    float getPyramidHeight(int x, int y)
    {

    }

    float getConeHeight(int x, int y)
    {

    }
基本上,我有两个变量:

w=二维阵列长度

h=二维阵列宽度

这就是我现在的处境:

#include <iostream>
#include <stdio.h>
using namespace std;

#define LENGTH 1000
#define WIDTH 800

float pyramidHeights[LENGTH][WIDTH]={0};
float coneHeights[LENGTH][WIDTH]={0};

float getPyramidHeight(int x, int y);
float getConeHeight(int x, int y);
void fillPyramid(int x, int y);
void fillCone(int x, int y);

int main()
{
    fillPyramid(LENGTH, WIDTH);
    fillCone(LENGTH, WIDTH);
    return 0;
}

void fillPyramid(int x, int y)
{
  for(int i=0;i<x;i++)
  {
     for(int j=0;j<y;j++)
     {
        pyramidHeights[i][j]=getPyramidHeight(i,j);
     }
  }
}

void fillCone(int x, int y)
{
  for(int i=0;i<x;i++)
  {
     for(int j=0;j<y;j++)
     {
        coneHeights[i][j]=getConeHeight(i,j);
     }
  }
}

float getPyramidHeight(int x, int y)
{
    //This is the first function I need to implement.

   return 0;
}

float getConeHeight(int x, int y)
{
    //This is the second function I need to implement.

   return 0;
}
#包括
#包括
使用名称空间std;
#定义长度1000
#定义宽度800
浮动高度[长度][宽度]={0};
float coneHeights[LENGTH][WIDTH]={0};
浮动高度(整数x,整数y);
浮点getconehight(整数x,整数y);
虚空填充金字塔(整数x,整数y);
空心圆锥体(整数x,整数y);
int main()
{
填充棱锥体(长度、宽度);
填充锥(长度、宽度);
返回0;
}
空心填充棱锥体(整数x,整数y)
{

对于(iTi=0;i这比几何学更多有关几何学。首先考虑锥和<代码>长度=宽度< /代码>。由于对称性,给定点以上的高度仅取决于它与基部中心的距离。如何?通过顶点绘制圆锥的垂直截面,并试图找出两者之间的关系。寻找类似的TrIa。恩格尔

如果
长度
不等于
宽度
,旋转对称性就消失了。圆已经变成了椭圆。每一层都以椭圆而不是圆的形式投射到基底上。最简单的方法是想象你的圆锥体是由一个单位半径的圆锥体各向异性拉伸而成,并且不转换你的poi然后你可以使用上面的(事实上,只缩放一个轴就足够了)。剩下的就留给你了

假设您的二维网格是离散的,您应该确保所有的计算都是用正确的类型完成的,例如,您不做整数除法而不是浮点除法

至于守则方面,我有以下建议:

  • 您真的需要包含的两个标题吗

  • 通常在文件范围内使用命名空间std

  • 不要这样使用
    #定义
    s。
    constexpr size\u t
    constexpr int
    可能更合适

  • 通常不鼓励使用全局变量,尽管在像这样的简单任务中,它们可能比传递东西更容易使用(如果您可以确保项目不会增长,也不会是多线程的)

  • 如果您决定去掉全局变量(但即使您不这样做),使用
    std::array
    而不是C array将使传递和返回结构更容易。使用
    std::vector
    甚至可以在运行时配置边界

  • <> >前文声明是好的,但在这种情况下,它们只是不必要的样板。我会考虑重新排序函数。


嘿,卢卡斯,在多次阅读你的解释后,我明白了垂直高度与距离中心的距离成正比,因此,基本上我将距离中心的距离映射到了高度,我成功地构建了金字塔。我在一行中解决了这个问题!难以置信,难以置信当你改变你看待这个问题的角度。关于全局变量和定义,我将按照你上面所说的去做,因为我总是像我的例子那样去做,但我知道这是不对的。谢谢!