Текущее время: Ср 27 ноя 2024 4:45

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 339 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 12  След.
Автор Сообщение
 Сообщение Ср 23 янв 2008 14:15
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Razum писал(а):
НО ЛУЧШЕ ВСЕГО, в нашем случае, НЕ ВЫПЕНДРИВАТЬСЯ, а писать все в одном модуле, и БЕЗ ФОРМ, а под командную строку!
Почему? Что от этого изменится?
Razum писал(а):
В Си аналог с модулями есть, и делается примерно так.
...
Razum, плиз, ну поподробнее! :god: С экземлом... :yes: Я ж тупой, С++ не знаю, и с полуслова не понимаю. :oops:

Добавлено спустя 32 минуты 2 секунды:

Ур-р-ря!!! Метод научного тыка сработал!!! :twisted: Знаете, чё и как я забожил? Написал в разделе "public" вот что:
void Rounder()
{
a = a * 2;
b = b * 3;
};
И потом уже юзал в коде "Rounder();". Ряботаеть! Думаю, мона, наконец, приступить к переписыванию кода с Васика! :wink: Надеюсь, больше гемора не будет... :oops:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Ср 23 янв 2008 14:43
Профиль  
#105d99
Аватара пользователя
Сообщения: 15233
Откуда: Москва, сектор бетонных домов
Зарегистрирован: Пн 20 фев 2006 3:56
Шаман писал(а):
Почему? Что от этого изменится?

Это проще. А если будут всякие формы и прочая фигня, то я тебе помогать не буду, сам же там толком не врубаюсь.

Добавлено спустя 47 секунд:

Шаман писал(а):
Razum, плиз, ну поподробнее!

По вышеназванной причине я этого объяснять не буду, и экзамплов приводить тоже не буду.


 Сообщение Ср 23 янв 2008 19:51
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Ребят, такая простенькая ботва: в Васике для округления числа до целых я юзал функцию "Fix". Она просто отбрасывает дробную часть числа, к примеру Fix(-3.7) = -3, Fix(3.7) = 3. Но в руководстве по Васику оговаривалась подобная ей функция, отличающаяся от неё лишь тем, что для положительных аргументов она, как и "Fix", отбрасывала дробную часть, тем самым округляя число до меньшего, но для отрицательных цисел - дополняла до большего по модулю, т.е. -3,7 -> -4. Дабы на такую подлянку в незнакомом мне С++ не напороццо, хочу спросить про эту байду у Вас.
З.Ы.: мне почему-то показалось, что если переменную, для которой всё время надо юзать округления, объявить как "int", то и округлять не надо, но вот, пишет, что "illegal use of floating point", так что, похоже, без функциевого округления не обойтись. Так какие там в С++ для этой задачи функции есть, не подскажете? Вроде, требуются "округл.вверх", "округл.вниз", и, если есть, то и "округл. по правилам мат. округления". :mrgreen: Тока шоб без той заковыристой кривоокруглючей, шо я выше описал. :roll:
Му? :roll:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Ср 23 янв 2008 22:23
Профиль  
Механоид 5 поколения
Аватара пользователя
Сообщения: 1260
Откуда: island Syberia
Зарегистрирован: Ср 10 янв 2007 9:14
floor - округляет вниз
ceil - округляет вверх
перед использованием в начале файла #include <math>

_________________
_=S.A.L.K.E.R.=_
"Кто кого еще порвет" - сказала Тузику грелка, надутая до 10 атмосфер
"У нас большие леса. Они способны без остатка поглотить любое воинское формирование" (с)


 Сообщение Ср 23 янв 2008 22:25
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
2 Шаман
Как я понял, тебе надо сделать так чтобы округление было нормальным.
Вот такой совет...

int - переменная которую надо округилить.
int_round - округлённая в меньшую сторону.

if ( (int*10) - (int_round*10) > 5 ) int = int_round+1 else int = int_round;

На работоспособность не проверял, но должно получиться.


 Сообщение Чт 24 янв 2008 16:24
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
PA3UJIb писал(а):
floor - округляет вниз
ceil - округляет вверх
ОК. Щас тестну на геморойность. В смысле, чтобы функции округляли по модулю, а не по значению. :no:
smt005 писал(а):
if ( (int*10) - (int_round*10) > 5 ) int = int_round+1 else int = int_round;
ОК. Спс. :yes:

З.Ы.: Вы тут приводили примеры для функции if, в которых после else идёт только одно действие. А если в случае "else" у меня много действий - алгоритм прям целый? Тогда нужно его взять в такие скобки: {}, да? :hm:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Чт 24 янв 2008 17:08
Профиль  
#105d99
Аватара пользователя
Сообщения: 15233
Откуда: Москва, сектор бетонных домов
Зарегистрирован: Пн 20 фев 2006 3:56
Шаман писал(а):
Тогда нужно его взять в такие скобки: {}, да?

Ага. Эти скобки называются составным оператором, и используются там, где должен быть один оператор, а надо сразу много.


 Сообщение Чт 24 янв 2008 18:41
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
PA3UJIb писал(а):
floor - округляет вниз
ceil - округляет вверх
И ни фига! ОБЕ эти функции оказались лажовыми, страдающими вышеописанным геморроем, т.е. несимметричным округлением для чисел разных знаков. К примеру,
floor(0.1) = 0, но floor(-0.1) = -1.
ceil(0.1) = 1, но ceil(-0.1) = 0.
Но требуется такой результат:
XXX(1.1) = 1, и XXX(-1.1) = 1.
Можно интерпретировать и как "функция XXX отбрасывает дробную часть числа".
Нетрудно придумать обход:
Sign(x) * floor(fabs(x)),
Но зачем городить огород, если, возможно, требуемая мне функция уже есть? К тому же, округление в моём коде А.Г.Р. используется очень часто, так что "горожение" повлияет на производительность, чего я всеми силами хочу избежать. :yes:
Му? :hm:

Добавлено спустя 1 час 21 минуту 4 секунды:

Ребята, плиз, ответьте на очередной мой дурацкий вопрос, и, походу, будет уже полностью реведён в С++ первый макрос! Вопрос такой: мне нуна возвести в "кривую" (например 0.68) степень ("х") некоторое выражение ("t"). В Васике всё было просто:
t ^ x
Но С++ чё-то вы**ывается, пишет "illegal use of floating point" (странно, что пишет это в данном случае, но заменой "^" на что-то другое ("*") доказано, что причина - простой стандартный оператор "^" не работает в С++). Что творить? :sad:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Чт 24 янв 2008 19:01
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
2 Шаман, посмотри в инете если никто не знает.
з.ы.: я лично с таким не сталкивался.

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Чт 24 янв 2008 19:25
Профиль  
Механоид 5 поколения
Аватара пользователя
Сообщения: 1260
Откуда: island Syberia
Зарегистрирован: Ср 10 янв 2007 9:14
2Шаман
Посмотри внимательнее мой пост от Ср 23 Янв 2008 10:24

В Си действительно нет функции возведения в степень, однако там существуют экспонента и логарифм - этим я лично всегда и пользовался

типа A<sup>B</sup> = e<sup>B*ln(A)</sup>

_________________
_=S.A.L.K.E.R.=_
"Кто кого еще порвет" - сказала Тузику грелка, надутая до 10 атмосфер
"У нас большие леса. Они способны без остатка поглотить любое воинское формирование" (с)


 Сообщение Чт 24 янв 2008 19:27
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
smt005 писал(а):
2 Шаман, посмотри в инете если никто не знает.
з.ы.: я лично с таким не сталкивался.
Наверное, в С++ для возведения числа в какую-нить степень существует какая-нить функция, а не простой оператор. Не знаете? :hm:

Добавлено спустя 1 минуту 18 секунд:

2 PA3UJIb: а-а-а, точно. :oops: Сушь, геймор-то какой... :tongue2: Ну ладно. :sad:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Чт 24 янв 2008 19:29
Профиль  
Механоид 5 поколения
Аватара пользователя
Сообщения: 1260
Откуда: island Syberia
Зарегистрирован: Ср 10 янв 2007 9:14
вот как раз функция Fix в Барсике и является несимметричной - здесь же все ясно - вниз, так вниз; вверх, так вверх.

желаешь ускорить расчет? тогда

#define FIX(a) sign(a)*floor(abs(a))

_________________
_=S.A.L.K.E.R.=_
"Кто кого еще порвет" - сказала Тузику грелка, надутая до 10 атмосфер
"У нас большие леса. Они способны без остатка поглотить любое воинское формирование" (с)


 Сообщение Чт 24 янв 2008 20:03
Профиль  
Участник
Сообщения: 37
Зарегистрирован: Ср 22 авг 2007 11:58
Шаман писал(а):
Но С++ чё-то вы**ывается, пишет "illegal use of floating point" (странно, что пишет это в данном случае, но заменой "^" на что-то другое ("*") доказано, что причина - простой стандартный оператор "^" не работает в С++). Что творить? :sad:
Правильно в С++ "^" - побитовое исключающее и(отрицание операции умножения) - никакого отношения к возведению в степень не имеет. А возведение в степень по-моему пишется так:
double XXX(double n, int i){
if(i==0) return 1;
if(i%2==1) return n*XXX(n, i-1);
else return XXX(n*n, i/2);}


 Сообщение Чт 24 янв 2008 20:42
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
Народ, Вы не представляете, как просто нашлось решение некалечного округления чисел: я просто те переменные, для придания значения которым нужно было округлять, декларнул как инты, и тогда когда им присваивается кривое значение, дробная часть числа отбрасывается автоматом. :tongue: И нет проблем. :supercool:

Добавлено спустя 3 минуты 14 секунд:

grifon писал(а):
Правильно в С++ "^" - побитовое исключающее и(отрицание операции умножения) - никакого отношения к возведению в степень не имеет. А возведение в степень по-моему пишется так:
double XXX(double n, int i){
if(i==0) return 1;
if(i%2==1) return n*XXX(n, i-1);
else return XXX(n*n, i/2);}
:shock: Ой, это что было?.. Ладно-ладно, не наезжайте - способ с экспонентой и логарифмом мне очень нравится... :oops: :mrgreen:

Добавлено спустя 17 минут 26 секунд:

2 PA3UJIb: слушь, звиняй, котёл совсем не варит, не пойму чё-то (сессию сегодня здал - сам понимаешь... :oops: :mrgreen: ). Тот способ, который ты описал с экспонентой и логарифмом:
нужно возвести "t" в степень "х" (t^х). Как, ещё раз, твой алгоритм будет выглядеть для такого случая? (хочу разобраться, но чё-то не пойму на том примере в посте, на который ты указал) :hm:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Чт 24 янв 2008 23:15
Профиль  
Участник
Сообщения: 37
Зарегистрирован: Ср 22 авг 2007 11:58
Шаман писал(а):
Ой, это что было?.. Ладно-ладно, не наезжайте - способ с экспонентой и логарифмом мне очень нравится...
То, что написано выше тебе понимать не обязательно. Просто перепиши код слово в слово, вместо XXX - название функции. Обращение к функции будет таким:
d=XXX(a, b);(где d - переменная, куда записывается результат, a - основание(вещественное), b - показатель степени). Между прочем работает намного быстрее возведения в степень через цикл.


 Сообщение Чт 24 янв 2008 23:21
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
2 PA3UJIb а, во, врубился в твой принцип. :oops: Типа, во:
t ^ x ~ exp(x * log(t))
Гы, работаеть – протестал. :twisted:
Тока какой-то всё ж вид неудобоваримый… Народ, объясните подробно, плиз, как функцию написать такую (да и вообще, в принципе, как это делается):
Stepen(t, x);
где "t" – это то, что будет возводиться в степень, а "x" – это степень, в которую надо возвести ентое "t".
З.Ы.: очень надеюсь, что ещё не очень Вас тут всех достал… :oops:

Добавлено спустя 3 минуты 42 секунды:

grifon писал(а):
То, что написано выше тебе понимать не обязательно.
Не, ну ты даёшь! Как я могу использовать то, чего не понимаю?! Ну, не знаю - мне такой подход не нравиццо... :roll:
grifon писал(а):
Между прочем работает намного быстрее возведения в степень через цикл.
Ты уверен? :hm:

Добавлено спустя 2 минуты 21 секунду:

grifon писал(а):
int i
Типа, степень, в которую будет возведено выражение, является целой? Не подойдёт: я ж говорил, что прикол в том, что степень - "кривое" число. :no:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Чт 24 янв 2008 23:38
Профиль  
Участник
Сообщения: 37
Зарегистрирован: Ср 22 авг 2007 11:58
После внимательноо прочтения math.h нашел функцию pow(double,double).
Сколько времени работает не знаю, не тестил, но раз в стандартной библиотеке - значит максимально быстро. Делает именно то, что ты просил(проверил).


 Сообщение Пт 25 янв 2008 1:44
Профиль  
Механоид 1 поколения
Аватара пользователя
Сообщения: 184
Откуда: Беларусь, Минск
Зарегистрирован: Вс 23 апр 2006 19:06
#Давно где-то откопал в Инете... Имхо в тему разговора. :wink:


КРАТКОЕ РУКОВОДСТВО ПРОГРАММИСТА ПО ЯЗЫКАМ ПРОГРАММИРОВАИЯ

Бурное размножение современных языков программирования (которые, похоже, просто заимствуют друг у друга
бессчетные нововведения) приводит к тому, что иногда бывает трудно вспомнить, какой язык вы в настоящее время
используете. Это удобное руководство предлагается для общего использования в целях помощи программистам,
оказавшимся перед такой дилеммой.

ЗАДАЧА: Прострелить себе ногу.

C: Вы простреливаете себе ногу.

C++: Вы случайно создаете дюжину экземпляров объекта "вы" и всем им простреливаете ногу. Срочная
медицинская помощь оказывается невозможной, так как вы не можете разобраться, где настоящие объекты, а где - те,
которые только указывают на них и говорят: "А вот - я!".

Фортран: Итерактивно вы простреливаете каждый палец ноги, а когда пальцы заканчиваются, загружаете следующую
ногу и продолжаете. Когда пули заканчиваются, вы все равно продолжаете попытки прострелить себе ноги,
потому что не имеете возможности обработать такую особую ситуацию.

Паскаль: Транслятор не позволит вам прострелить себе ногу.

Ada: После тщательного описания пакета "нога", вы пытаетесь одновременно зарядить пистолет, нажать курок,
завопить и выстрелить себе в ногу. В ходе попыток обнаруживается, однако, что вас постигла неудача, так как
ваша нога оказалась неверного типа.

Кобол: Hаводите ПИСТОЛЕТ COLT 45 на HОГА.СТОПА, Затем помещаете РУКА.КИСТЬ.ПАЛЕЦ на ПИСТОЛЕТ.КРЮЧОК и
HАЖИМАЕТЕ. Затем возвращаете ПИСТОЛЕТ в КОБУРУ. ПРОВЕРЬТЕ, нуждаются ли шнурки в повторном связывании.

LISP: Вы простреливаете себе отросток, который держит пистолет, с помощью которого вы простреливаете себе
отросток, который держит пистолет, с помощью которого вы простреливаете себе отросток, который держит пистолет,
с помощью которого вы простреливаете себе отросток, который держит пистолет, с помощью которого вы
простреливаете себе отросток, который...

Форт: Hога простреливать себе вы.

Пролог: Вы сообщаете вашей программе, что вы хотите иметь простреленную ногу. Программа разрабатывает способ
этого достичь, но синтаксис языка не позволяет объяснить этот способ вам.

Бейсик: Вы простреливаете себе ногу из водяного пистолета. а расширенных реализациях языка продолжайте,
пока вся нижняя часть тела не промокнет.

Visual Basic: Hа самом деле вы будете только выглядеть, как будто ваша нога прострелена. Однако в
процессе реализации вы получите столько удовольствия, что подобные мелочи вас не озаботят.

HyperTalk: Поместите первую пулю пистолета в ступню левой ноги вас. Сообщите результат.

Motif: Вы затрачиваете несколько дней на построение UIL - описания вашей ноги, пули, ее траектории и
замысловатой резьбы по слоновой кости на рукоятке пистолета. Когда вы наконец-то управились и готовы нажать
на курок, пистолет закупоривается.

APL: Вы простреливаете себе ногу, затем тратите весь день на то, чтобы представить себе, как это сделать с
меньшим количеством символов.

Снобол: Если вам удастся, прострелите себе левую ногу. Если не удастся, то прострелите себе правую ногу.

Unix:
% Ls
Foot.c foot.h foot.o toe.c toe.o
% Rm * .o
Rm: .o no such file or directory
% Ls
%

Параллельный Euclid: Вы простреливаете себе чью-то чужую ногу.

Язык управления заданиями IBM/370: Вы посылаете свою ногу в управляющую информационную систему с
приложением документа на 400 страниц, точно описывающего, как именно вы хотите быть простреленным. Через три года
ваша нога возвращается с глубоким ожогом.

Paradox: Не только вы можете прострелить себе ногу, но и ваши пользователи.

Access: Вы пытаетесь прицелиться в вашу ногу, но в результате простреливаете все Борландовские дистрибутивные
дискеты.

Revelation: Вы уверены, что сможете прострелить себе ногу, как только разберетесь, для чего служат эти
маленькие хорошенькие пульки.

Ассемблер: Вы пытаетесь прострелить себе ногу, но обнаруживаете, что прежде вам придется изобрести пистолет,
пулю, курок и вашу ногу.

Модула-2: После того, как вы понимаете, что фактически ничего не можете сделать на этом языке, вы
простреливаете себе голову.

Автор: David Ruggiero (jdavid@halcyon.com)
Osiris Technical Services, Seattle WA

Перевод: Yuri Fomin

_________________
Тока тока тока МАК.... токамак! Краааасный клаааасный мааак! )


 Сообщение Пт 25 янв 2008 10:15
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
2 TokamaK , я бы дал предупреждение за такой бред!

_________________
https://sites.google.com/site/intelligencecells
http://www.youtube.com/user/IntelligenceCells


 Сообщение Пт 25 янв 2008 12:29
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
:lol: "вот говорят, анекдот для тупых, для тупых... А мне понравился!"
Но вообще-то, это всё ж в приколы надо было. :roll:
smt005 писал(а):
я бы дал предупреждение за такой бред!
Да не, очень оригинально и хорошо придумано.
grifon писал(а):
pow(double,double).
О! То что надо. :yes: Спасибо! :twisted:
Хотя есть подозрения насчёт перенавороченности этой функции: возводит в степень даже отрицательные числа (но только в целую), хотя при дробной степени и выдаёт ошибку. Ну, юзну енту функцию, а если что - потом напишу (если расскажут как) экспоненциально-логарифмную функцию по принципу PA3UJIb'а. Заменить нетрудно. :roll:

Добавлено спустя 21 минуту 13 секунд:

Ну вот, первые успехи уже есть: основной макрос "Rounder" переписан в С++, все ошибки, судя по успешной компилляции, устранены. Проблема лишь в том, что я не знаю, как проверить, работаеть он, или нет... :lol: Для этого мне нужно как-нить увидеть в каком-нить графическом виде карту высот (float hmap[1000][1000];). :roll: Хоть даже в виде разноцветовысотовой 2D-картинки.
Или мне переписывать все оставшиеся, и надеятся, что в конце концов не выйдет лажа?.. :oops: Может, есть какой-нить боль-мень простой способ отображения матрицы чисел?

Добавлено спустя 3 минуты 33 секунды:

2 smt005: слушь, если на 3D - ясен пень - тебе много время надо, то, может, простой конвертер матрицы в 2D-картинку ты можешь быстренько написать? Что-то мне кажеццо, что, возможно, у тебя уже есть подобные наработки... :roll:
А? :hm:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Пт 25 янв 2008 17:24
Профиль  
Трёхмерный
Аватара пользователя
Сообщения: 3622
Зарегистрирован: Пн 17 янв 2005 19:23
2 Шаман, у Разума вроде есть опыт.
У меня к сожалению нет вообще опыта в С++. :cry:


 Сообщение Пт 25 янв 2008 17:59
Профиль  
Участник
Сообщения: 37
Зарегистрирован: Ср 22 авг 2007 11:58
Шаман писал(а):
Хотя есть подозрения насчёт перенавороченности этой функции
Нисколько - лучше перенавороченность, чем недовороченность.
Шаман писал(а):
возводит в степень даже отрицательные числа (но только в целую), хотя при дробной степени и выдаёт ошибку.
Правильно, а как ты себе представляешь отрицательное число в дробной степени(корень четной степени из отрицательного числа комплексен - есть переопределение этой функции для класса комплексных чисел, там работает).
Шаман писал(а):
Для этого мне нужно как-нить увидеть в каком-нить графическом виде карту высот (float hmap[1000][1000];). :roll: Хоть даже в виде разноцветовысотовой 2D-картинки.
Попробую написать на DB Pro Viever(если время будет) и переслать тебе EXE-шник. Формируй массив как таблицу в txt файле.


 Сообщение Пт 25 янв 2008 19:05
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
grifon писал(а):
Нисколько - лучше перенавороченность, чем недовороченность.
Смотря когда. :wink: В данном случае, чем проще, тем лучше: число, которое будет возводится в степень, по определению положительное, а степень - в районе 0.6-0.8. Зато вот о производительности мне нужно заботиться в первую очередь: ту картинку демо карты размером 256х256 в Ехселе мой А.Г.Р. воротил минут под 15 (и это на моём двухшишковом проце в 2.8 ГГц!). :ooo: Даже если скинуть на Ехселевскую тормознутость (в следствие как раз его перенавороченности :wink: ), да учесть, что и Васик скорострельностью не отличается, то всё равно получится, скорее всего, долго.
Шаман писал(а):
Хотя есть подозрения насчёт перенавороченности этой функции: возводит в степень даже отрицательные числа (но только в целую)
...что свидетельствует о том, что в коде должно быть, есть обработка разных вариантов ввода да разная их обработка. А это в любом случае жрёт больше ресурсов, чем мне нужно. Ладно, хрен с ним - за такими мелочами гоняццо. Работаеть - ладно пока. :yes:
grifon писал(а):
Попробую написать на DB Pro Viever
А в С++ как участок кода не могёшь? Мне было бы проще встроить это в программу, да и работать так было бы намного.удобней. :roll:
grifon писал(а):
Формируй массив как таблицу в txt файле.
Опиши формат конкретней, или пришли участок кода С++, сохраняющий матрицу "float hmap[1000][1000]" в требуемой структуре.
И всё же, попробуй придумать способ отображения матрицы в коде С++: ведь получится очень неудобно: сгенеренную матрицу каждый раз нужно будет сохранять, потом загружать в твою прогу... Всё ж думни насчёт С++ платформы, ладно? Ты ж С++, походу, хорошо знаешь? :yes:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Пт 25 янв 2008 19:07
Профиль  
Механоид 1 поколения
Аватара пользователя
Сообщения: 184
Откуда: Беларусь, Минск
Зарегистрирован: Вс 23 апр 2006 19:06
2 smt005 А я бы на твоём месте позволил себе расслабиться и улыбнуться, вместо того чтобы быть таким тугим и мрачным.

P.S. Модеры, сор за оффтоп.

_________________
Тока тока тока МАК.... токамак! Краааасный клаааасный мааак! )


 Сообщение Пт 25 янв 2008 20:55
Профиль  
Участник
Сообщения: 37
Зарегистрирован: Ср 22 авг 2007 11:58
Шаман писал(а):
...что свидетельствует о том, что в коде должно быть, есть обработка разных вариантов ввода да разная их обработка. А это в любом случае жрёт больше ресурсов, чем мне нужно.
Видишь-ли ты не прав. Та функция, которую я написал использует рекурсию(повторный вызов себя из своего-же тела) - это очень скоростной метод, кроме того, скорость выполнения функции зависит не от количества разветвленности(if-ов), а от количества условий в них и сложности их выполнения. В-общем расслабься - это работает очень бысто.
Шаман писал(а):
Васик скорострельностью не отличается
Опять ты не прав - самые последнии версии Basic`a достаточно скоростные.
Шаман писал(а):
А в С++ как участок кода не могёшь? Мне было бы проще встроить это в программу, да и работать так было бы намного.удобней. :roll:
В основном С++ 3D графики нет вообще, только 2D(можно подключать DirectX, но это очень сложно, и пока я это нормально изучу уйдут месяцы, если не годы). А реализовывать 3D на 2D по моему достаточно сложно(во-всяком случае не знаю, как это нормально сделать. Я тебе предлагал - пиши ты на DB Pro - он очень скоростной(тебе хватит) и с преобразованием мучится не надо будет, но ты не хочешь. Чтож как хочешь. Я могу только Viever написать на DB Pro. Поищи еще кого если так на С++ 3D хочешь, может кто знает DirectX.
А формат данных такой: сверху по горизонтали - столбцы, по вертикали строки, в левом верхнем углу побел или 0, далее елементы массива в соответствующих ячейках матрицы. Файл с расширением txt.


 Сообщение Пт 25 янв 2008 21:59
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
2 grifon: сущь, я вот что придумал (тока теория): в С++ мона рисовать точки. А что если циклами задать алгоритм, который бы нарисовал на форме эту карту попиксельно? Типа, брать по очереди каждую точку высоты и рисовать на форме пиксел с соответствующими координатами. Это ж вроде несложно. :yes: Тока проблема в том, как конвертать цифровое значение высоты (у неё формат float) в цветовое значение точки? Там же вроде цветов пару штук всего, да и каждый имеет индивидуальное название. Или можно как-то цвета пикселов числами выражать? Ты что-нить можешь подсказать по этому поводу? :hm:

_________________
Сообщество креативных механоидов:
aim-fans.ru


 Сообщение Пт 25 янв 2008 22:19
Профиль  
#105d99
Аватара пользователя
Сообщения: 15233
Откуда: Москва, сектор бетонных домов
Зарегистрирован: Пн 20 фев 2006 3:56
2 Шаман
Если уж на то пошло, пиши свой результат в tga или bmp файлы, они устроены(особенно первый) предельно просто, а потом эти файлы будешь просто загружать в каком-нето вьювере.
grifon писал(а):
Та функция, которую я написал использует рекурсию(повторный вызов себя из своего-же тела) - это очень скоростной метод

Ого, не знал, тута пожалуйста поподробней. Интересно. Насколько я знаю, все математические функции в компе реализованы с помощью формул тейлора, которые позволяют представить любую функцию в виде многочлена. Имхо, эти формулы проще реализовать интеративным алгоритмом, а не рекурсивным, да и интеративный все равно быстрее будет.


 Сообщение Пт 25 янв 2008 22:53
Профиль  
Скриптизёр
Сообщения: 10646
Откуда: Мариуполь
Зарегистрирован: Пт 13 апр 2007 17:15
Вот сделал простенькую программку для записи карты высот (100x100):
http://files.filefront.com/TGenzip/;950 ... einfo.html
Не знаю насколько рационально я провожу запись, но считывает правильно. Значения генерируются абсолютно автоматически (т.е. никакой речи о создании разумных геоконструкций; может, потом попробую).


Последний раз редактировалось Krogoth Пт 25 янв 2008 23:22, всего редактировалось 1 раз.

 Сообщение Пт 25 янв 2008 23:11
Профиль  
Участник
Сообщения: 37
Зарегистрирован: Ср 22 авг 2007 11:58
Razum писал(а):
Насколько я знаю, все математические функции в компе реализованы с помощью формул тейлора, которые позволяют представить любую функцию в виде многочлена. Имхо, эти формулы проще реализовать интеративным алгоритмом, а не рекурсивным, да и интеративный все равно быстрее будет.
После внимательного изучения этого вопроса выяснил, что действительно функции в компьютере представляются в виде рядов тейлора. Но пример той функции, текст которой я приводил, работает быстрее чем разложение на ряд, т.к. состоит только из простых операций и каждая операция выполняется очень быстро(рекурсия с такой же скоростью, как и арифм. операции)(во всяком случае нам так на программировании рассказывали), а ряд вычисляется линейно, но с большим числом операций, таких как само возведение в степень и т.д.(инфа из инета). Но эта функция работает только для целых степеней.


 Сообщение Сб 26 янв 2008 13:11
Профиль  
Разработчик идей
Аватара пользователя
Сообщения: 4577
Откуда: Минск, Беларусь
Зарегистрирован: Ср 14 ноя 2007 19:00
О, метод научного тыка снова дал результаты. Оказалось, что в С++ совсем просто можно нарисовать пикселы на форме:
["х" - это координата пиксела по горизонали, "у" - по вертикали; "color" - это цвет пиксела]

Canvas->Pixels[x][y] = color;

Проблема лишь в том, что "color", определяющий цвет пиксела, является стандартизированным названием цвета ("clButtonFace", к примеру - это серый). Но вот что мне дал метод научного тыка: вместо "color", оказывается, можно ставить не только стандартное название цвета, но и какое-нить число. "Исследования" показали, что это число определяет интенсивность красного цвета ("0" = минимальная интенсивность (чёрный), "255" = масимальная интенсивность (ярко-красный)). Так что, походу, метод определения цвета пиксела как смесь красного, зелёного и синего, должен работать в С++, тока мне так и не удалось найти в мануале способа числового задания этого цвета. Народ, а Вы не знаете? :hm:

Добавлено спустя 1 минуту 43 секунды:

Krogoth писал(а):
http://files.filefront.com/TGenzip/;9506925;/fileinfo.html
Чё, конкурент, да? :mad:
:lol:
Такой вопр: а для чего второй лист на твоей проге? :hm:

Добавлено спустя 43 секунды:

З.Ы.: 2 Krogoth: на чём писал?

Добавлено спустя 3 минуты 37 секунд:

Razum писал(а):
реализовать интеративным алгоритмом, а не рекурсивным
grifon писал(а):
функции в компьютере представляются в виде рядов тейлора.
Во имя Святого Топора Славона!!! :ooo: С кем я флужу?! :shock:
:lol:

Добавлено спустя 52 минуты 2 секунды:

Уррря!!! Допёр, как цвет пикселам задавать!!! :twisted:
Во:
Canvas->Pixels[x][y] = RGB(red, green, blue);
где "x", "y" - координаты пиксела, а "red", "green" и "blue" - интенсивности соответствующих цветов, смешением которых формируется цвет пиксела (RGB(255, 0, 0) = красный, RGB(0, 255, 0) = зелёный, RGB(0, 0, 255) = синий; RGB(0, 0, 0) = чёрный, RGB(255, 255, 255) = белый). Ну сё, графическая интерпретация карты высот придумана: высоты точек (float hpt) настройками задам так, чтобы не превышали 255, максимальной высоте будет соответствовать красный цвет пиксела, минимальной - зелёный. Формула для цвета пиксела с координатами точки: RGB(hpt, 255 - hpt, 0). Гы. :twisted:

Добавлено спустя 2 минуты 26 секунд:

grifon писал(а):
Я могу только Viever написать на DB Pro.
Спасибо за помощь, но решение я уже нашёл. Надеюсь, что ты не успел потратить время зря. :yes:

_________________
Сообщество креативных механоидов:
aim-fans.ru


Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 339 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7 ... 12  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB