Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2014, 23:51   #1
Nicehell
 
Регистрация: 12.08.2014
Сообщений: 4
Подмигивание C++ заполнения трехмерного массива в форме шара

Здравствуйте, учу с++, такая задачка - есть трехмерный статический массив n*n*n забитый 0, нужно вписать в массив шар из "1" и вывести все послойно. Как вывести послойно я понимаю, но вот забить внутри шар из 1 не выходит(не могу придумать формулу условие для присваивания единиц).
Учили только условный оператор,циклы и массивы.(Без указателей,функций etc). Я понимаю как получить центр шара и радиус, но корректно придумать условие не выходит. Достаточно подсказать саму идею код мне и самому интересно будет написать =)
Nicehell вне форума Ответить с цитированием
Старый 13.08.2014, 00:19   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Просто геометрической формулой. Допустим есть массив [-5..+5, -5..+5, -5..+5], "радиус" которого 5, а центр в (0,0,0)
Берём в тройном цикле на i, j, k каждую координату и вычисляем расстояние до центра. Если корень_из( i^2 + j^2 + k^2 )< radius то значит точка в сфере.

Если массив [0..3, 0..3, 0..3], то радиус 1.5, центр в (1.5, 1.5, 1.5) откуда аналогично корень_из( (i-1.5)^2 + (j-1.5)^2 + (k-1.5)^2 )< radius ...
eoln вне форума Ответить с цитированием
Старый 13.08.2014, 00:54   #3
Nicehell
 
Регистрация: 12.08.2014
Сообщений: 4
По умолчанию

Спасибо за ответ .Получается достаточно сделать радиус n/2 и получиться условие корень из (i-n/2)^2 + (j-n/2)^2 + (k-n/2)^2 < n/2 и все это в тройном цикле.
Nicehell вне форума Ответить с цитированием
Старый 13.08.2014, 03:17   #4
Nicehell
 
Регистрация: 12.08.2014
Сообщений: 4
По умолчанию

Что здесь неправильно?

Код:
#include <iostream>
#include <windows.h>
#include <cmath>
using namespace std;

void main()
{
	system("mode con cols=150 lines=50");

	const int n = 10;
	int Ar[n][n][n] = { 0 };

	for (int k = 0; k < n; k++)
	{
		for(int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				if (sqrt((k - n / 2)^2 + (i - n / 2)^2 + (j - n / 2)^2) < n / 2) Ar[k][i][j] = 1;
			}
		}
	}

	for (int k = 0; k < n; k++)
	{	
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < n; j++)
			{
				cout << Ar[k][i][j] << "\t";
			}
			cout << endl;
		}
		cout << "\n\n\n";
		Sleep(6000);
	}
}

Последний раз редактировалось Nicehell; 13.08.2014 в 04:10.
Nicehell вне форума Ответить с цитированием
Старый 13.08.2014, 11:30   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

^ - не возведение в степень, а битовая операция "исключающее или".
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.08.2014, 14:08   #6
Nicehell
 
Регистрация: 12.08.2014
Сообщений: 4
По умолчанию

спасибо, теперь все работает =)
Nicehell вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++. Запись двух/трехмерного массива в файл. Noyabr Помощь студентам 0 21.01.2012 11:51
Заполнения массива разными цифрами у VB legendary Помощь студентам 1 30.11.2010 18:07
заполнения двумерного массива С++ Caнёk Помощь студентам 10 26.10.2010 17:24
Заполнение трехмерного массива General_vrn Общие вопросы Delphi 2 03.05.2010 16:59