forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Visual Basic (http://forum.boolean.name/forumdisplay.php?f=62)
-   -   помогите переписать код (http://forum.boolean.name/showthread.php?t=11528)

Aceton 21.12.2009 00:14

помогите переписать код
 
код на бесике
PHP код:

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 напрягает)

impersonalis 21.12.2009 00:37

Ответ: помогите переписать код
 
...
if((IX&1)^(IY&1))
SY+=(SX/3);
else
SY+=((1-SX)/3);

IY=...

Aceton 21.12.2009 12:05

Ответ: помогите переписать код
 
а Int в бесике окруляет в какую сторону?

H@NON 21.12.2009 12:41

Ответ: помогите переписать код
 
в бейсике округляет в нижнюю Int(0.45) = 0

Aceton 21.12.2009 13:20

Ответ: помогите переписать код
 
PHP код:

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 чет оне помогает

Aceton 21.12.2009 13:35

Ответ: помогите переписать код
 
а все вопрос решен (int) заменил на modf

Жека 21.12.2009 13:35

Ответ: помогите переписать код
 
Вообще, приведение к 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


Aceton 21.12.2009 13:47

Ответ: помогите переписать код
 
PHP код:

Dim MyNumber As Integer
MyNumber 
Int(99.8)   ' Returns 99.
MyNumber = Int(-99.8)  ' 
Returns -100.
MyNumber 
Int(-99.2)  ' Returns -100. 

вообще я тут почитал что бесик что C++ int делает тоже самое, хотя почемуто пример не пашет как надо

Жека 21.12.2009 13:55

Ответ: помогите переписать код
 
Вообще-то, при работе с float очень желательно приводить входящие в выражение переменные и числа к флоату.
Например, вместо
Код:

SX = X * 2 / ISO_WIDTH;
писать
Код:

SX = (float)X * 2.0 / (float)ISO_WIDTH;
И так везде в коде. Попробуй заменить таким образом.

Aceton 21.12.2009 16:24

Ответ: помогите переписать код
 
PHP код:

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);
    } 

положительные значения обрабатываются адекватно теперь, но отрицательные чуть чуть не совпадают

pax 28.02.2010 22:30

Ответ: помогите переписать код
 
Цитата:

Сообщение от Aceton (Сообщение 130420)
PHP код:

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 (округление в нижнюю сторону).


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot