C++ 计算圆锥体内的三维笛卡尔坐标

C++ 计算圆锥体内的三维笛卡尔坐标,c++,C++,所以我在这里要做的就是在一个倒锥内排列点的三维笛卡尔坐标(半径随高度减小)。我在这里采用的基本方法是整体降低高度,h,并在高度h形成的圆内绘制点(x,y)。因为这个圆的半径是可变的,所以我使用一个简单的相似性条件来确定每次迭代的半径。我的初始高度是1000,半径应该是3500。此外,这些圆心位于(0,0)[z轴穿过圆锥体的顶点,并垂直于底部]。代码运行不正常,显示退出状态为-1。有人能帮我弄清楚我的实现是否因为一些大小错误或其他原因而关闭了吗 #include<bits/stdc++.h&

所以我在这里要做的就是在一个倒锥内排列点的三维笛卡尔坐标(半径随高度减小)。我在这里采用的基本方法是整体降低高度,
h
,并在高度
h
形成的圆内绘制点
(x,y)
。因为这个圆的半径是可变的,所以我使用一个简单的相似性条件来确定每次迭代的半径。我的初始高度是1000,半径应该是3500。此外,这些圆心位于
(0,0)
[z轴穿过圆锥体的顶点,并垂直于底部]。代码运行不正常,显示退出状态为-1。有人能帮我弄清楚我的实现是否因为一些大小错误或其他原因而关闭了吗

#include<bits/stdc++.h>
#define ll long long int
using namespace std;

int main(){
    float top[1010][9000][3];
    ll i = 0;
    for(ll h = 999; h >=0; h--){
        float r=(h+1)*(3.5);
        for (ll x = floor(r) * (-1); x <= floor(r); x++){
            for (ll y = floor(r) *(-1); y <= floor(r); y++){
                if(pow(x,2) + pow(y,2) <= pow(floor(r),2)){
                    top[h][i][0] = x;
                    top[h][i][1] = y;
                    top[h][i][2] = 9.8;
                    i++;
                }
            }
        }
        i=0;
    }
    cout << "done";
    for (ll m = 0; m < 1000; m++){
        for(ll n = 0; n < 7000; n++){
            if(top[m][n][2] == 9.8){
                cout << top[m][n][0] << top[m][n][1];
            }
        }
    }
}
#包括
#定义ll long long int
使用名称空间std;
int main(){
浮顶[1010][9000][3];
ll i=0;
对于(ll h=999;h>=0;h--){
浮点数r=(h+1)*(3.5);

对于(ll x=楼层(r)*(-1);x您不需要将
ll
声明为
long-long-int
。您使用的索引将适合
int
的内部

这是您的问题:将代码更改为此以查看发生了什么:

for(ll h = 999; h >=0; h--){
    float r=(h+1)*(3.5);
    for (ll x = floor(r) * (-1); x <= floor(r); x++){
        for (ll y = floor(r) *(-1); y <= floor(r); y++){
            if(pow(x,2) + pow(y,2) <= pow(floor(r),2)){
                /* top[h][i][0] = x;
                top[h][i][1] = y;
                top[h][i][2] = 9.8; //*/
                i++; // this gets really big
            }
        }
    }
    cout << "max i: " << i << endl;
    i=0;
}
(ll h=999;h>=0;h--)的
{
浮点数r=(h+1)*(3.5);

对于(ll x=楼层(r)*(-1);x 1/不包括
,这是一个内部实现细节。包括您实际需要的公共标头。2/这是否运行?它是否打印任何内容?当您没有返回语句时,它如何返回-1?3/是否可能是您的百兆字节自动变量
top
有点太大?它显示exitrepl上的状态-1。它是编译器,当我在代码块上运行它时会终止。关于bits/stdc++,我写这篇文章时并不是为了提高效率,我只是需要让代码快速运行。lol。我知道这不是好的“软件”练习,但这是一个很好的竞争性编程练习。我认为这是内存问题,这就是为什么我把它放在这里。是因为top是一个太重的变量吗?如果将“top”声明为静态,它将不会计入堆栈预算。您还可以受益于这样一个事实,即在圆锥体内移动的路径是椭圆。(这是轨道力学的基础)是的,所以我找出了哪里出了问题。基本上我假设在一个具有特定y和z坐标的圆中不会有超过2r点(因为直径是圆中最大的弦).但我存储了圆圈中所有点的编号,而不仅仅是特定和弦的编号。非常感谢!