Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Visual Basic

Ответ
 
Опции темы
Старый 21.12.2009, 00:14   #1
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
помогите переписать код

код на бесике
SX cW 
    IX 
Int(SX
    
SX SX IX 
    SY 
/ (cH 3
    
IY Int(SY
    If (
IX And 1) Xor (IY And 1Then 
      SY 
SY SX 
    
Else 
      
SY SY + (SX) / 
    End 
If 
    
IY Int(SY
    
IX Int((IX IY) * 0.5
как он будет на С++? строка If (IX And 1) Xor (IY And 1) Then напрягает)
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Старый 21.12.2009, 00:37   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,934 пользователей)
Ответ: помогите переписать код

...
if((IX&1)^(IY&1))
SY+=(SX/3);
else
SY+=((1-SX)/3);

IY=...
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Aceton (21.12.2009)
Старый 21.12.2009, 12:05   #3
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
Ответ: помогите переписать код

а Int в бесике окруляет в какую сторону?
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Старый 21.12.2009, 12:41   #4
[email protected]
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 774 пользователей)
Ответ: помогите переписать код

в бейсике округляет в нижнюю Int(0.45) = 0
(Offline)
 
Ответить с цитированием
Старый 21.12.2009, 13:20   #5
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
Ответ: помогите переписать код

int X = (int)mx;
    
int Y = (int)my;
    
float SX,SY;
    
SX ISO_WIDTH;
    
ISO_X = (int)SX;
    
SX SX ISO_X;
    
SY / (ISO_HEIGHT 3);
    
ISO_Y = (int)SY;
    if((
ISO_X&1)^(ISO_Y&1))
    {
        
SY+=(SX/3);
    }
    else
    {
        
SY+=((1-SX)/3);
    }
    
ISO_Y = (int)SY;
    
ISO_X = (int)((ISO_X ISO_Y) * 0.5); 
сделать то сделал, но изза разного округления не выходит, +\-0.5 чет оне помогает
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Старый 21.12.2009, 13:35   #6
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
Ответ: помогите переписать код

а все вопрос решен (int) заменил на modf
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Старый 21.12.2009, 13:35   #7
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: помогите переписать код

Вообще, приведение к Int'у - это не округление, а отбрасывание дробной части. В с++ именно так работает приведение к инт'у.
Т.е.
(int)1.99999 = 1
Однако в блитце (во всех ли бейсиках так - не знаю) не так, в нём как раз округление.
Правило округления такое:
Если число чётное ТО
{
  Если дробная часть числа <=(меньше или равна) 0.5 то
    округляет в меньшую сторону
  Иначе
    округляется в большую сторону
}
Иначе
{
  Если дробная часть числа <(строго меньше) 0.5 то
    округляет в меньшую сторону
  Иначе
    округляется в большую сторону
}
из справки по блицу:
Int converts floating point numbers by rounding to the nearest integer. 
NOTE: This is not the traditional meaning of Int in Basic. 

What about numbers exactly halfway between integers? 
The rounding is to the nearest even integer: 

Int( 2.5 ) ... produces 2 
Int( 3.5 ) ... produces 4
(Offline)
 
Ответить с цитированием
Старый 21.12.2009, 13:47   #8
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
Ответ: помогите переписать код

Dim MyNumber As Integer
MyNumber 
Int(99.8)   ' Returns 99.
MyNumber = Int(-99.8)  ' 
Returns -100.
MyNumber 
Int(-99.2)  ' Returns -100. 
вообще я тут почитал что бесик что C++ int делает тоже самое, хотя почемуто пример не пашет как надо
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Старый 21.12.2009, 13:55   #9
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: помогите переписать код

Вообще-то, при работе с float очень желательно приводить входящие в выражение переменные и числа к флоату.
Например, вместо
SX = X * 2 / ISO_WIDTH;
писать
SX = (float)X * 2.0 / (float)ISO_WIDTH;
И так везде в коде. Попробуй заменить таким образом.
(Offline)
 
Ответить с цитированием
Старый 21.12.2009, 16:24   #10
Aceton
ПроЭктировщик
 
Аватар для Aceton
 
Регистрация: 22.03.2009
Сообщений: 140
Написано 15 полезных сообщений
(для 24 пользователей)
Ответ: помогите переписать код

float X,Y;
    
mx
    
my
    
SX 2.0 ISO_WIDTH
    
modf(SX,&ISO_X); 
    
SX SX ISO_X
    
SY 4.0 / (ISO_HEIGHT 3.0); 
    
modf(SX,&ISO_Y);
    if(((int)
ISO_X&1)^((int)ISO_Y&1)) 
    { 
        
SY+=(SX/3.0); 
    } 
    else 
    { 
        
SY+=((1.0-SX)/3.0); 
    } 
    
modf(SY,&ISO_Y);
    
    if((
ISO_X ISO_Y) * 0.5<0.0)
    {
        
modf((ISO_X ISO_Y) * 0.5-1.0,&ISO_X);
    }
    else
    {
        
modf((ISO_X ISO_Y) * 0.5,&ISO_X);
    } 
положительные значения обрабатываются адекватно теперь, но отрицательные чуть чуть не совпадают
__________________
Все о создании и разработке игр и не только
(Offline)
 
Ответить с цитированием
Старый 28.02.2010, 22:30   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: помогите переписать код

Сообщение от Aceton Посмотреть сообщение
Dim MyNumber As Integer
MyNumber 
Int(99.8)   ' Returns 99.
MyNumber = Int(-99.8)  ' 
Returns -100.
MyNumber 
Int(-99.2)  ' Returns -100. 
вообще я тут почитал что бесик что C++ int делает тоже самое, хотя почемуто пример не пашет как надо
Не ругайте за некрофилию, тут похоже нужно использовать функцию floor (округление в нижнюю сторону).
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 21:29.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2023, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com