Bueno, tengo este C (en realidad es el peón, pero es un metamod de C) y el código i no se traducen en vb.net, alguien me puede ayudar con esto:
GetPointZPos(Float: point_X, Float: point_Y, &Float: point_Z)
{
if(!(-3000.0 < point_X < 3000.0 || -3000.0 < point_Y < 3000.0))
return 0;
static
File: z_Map_File
;
if(!z_Map_File)
{
z_Map_File = fopen("SAfull.hmap", io_read);
if(!z_Map_File)
return 0;
}
new
z_Data[2 char]
;
fseek(z_Map_File, (-6000 * (floatround(point_Y, point_Y <= 0.0 ? floatround_ceil : floatround_floor) - 3000) + floatround(point_X, point_X <= 0.0 ? floatround_ceil : floatround_floor) + 3000) * 2);
fblockread(z_Map_File, z_Data, 2 char);
point_Z = (z_Data[1 / 2] & 0x0000FFFF) * 0.01;
return 1;
}
Public Function GetZFromXY(ByVal X As Single, ByVal Y As Single) As Single
If Not (-3000.0 < X < 3000.0 Or -3000.0 < Y < 3000.0) Then Return 0.0
Static Reader As New IO.BinaryReader(New IO.FileStream(My.Application.Info.DirectoryPath & "\SAfull.hmap", IO.FileMode.Open))
Dim Z(2) As Byte
Reader.BaseStream.Seek(((-6000 * (Math.Round(Y, If(Y <= 0.0, MidpointRounding.AwayFromZero, MidpointRounding.ToEven)) - 3000) + Math.Round(X, If(X <= 0.0, MidpointRounding.AwayFromZero, MidpointRounding.ToEven)) + 3000)) * 2, IO.SeekOrigin.Begin)
Reader.Read(Z, 0, 2)
Reader.Close()
return ((Z(1 / 2) And &HFFFF) * 0.01)
End Function
codigo actualizado
do you not speak spanish?
google traductor. Estoy viviendo en anrgentina ahora, pero yo soy de canada
Well then for than you feel good here, I going to speaking in english :xD
No ya en serio, se ve bien traducido, claro son 2 lenguajes muy diferentes, quizas el problema está en la interpretación que el compilador le da al código, problemas de conversión u operación deberias debuggear ambos y ver como van cambiando los valores en las variables así encontrarás las diferencias. Y que tan diferentes son los resultados finales de ambos códigos?
My name is Eduardo, I live in Uruguay. I like french fries.
Hay tantos foros en ingles... :silbar:
Cita de: Keyen Night en 17 Octubre 2011, 16:05 PM
Well then for than you feel good here, I going to speaking in english :xD
No ya en serio, se ve bien traducido, claro son 2 lenguajes muy diferentes, quizas el problema está en la interpretación que el compilador le da al código, problemas de conversión u operación deberias debuggear ambos y ver como van cambiando los valores en las variables así encontrarás las diferencias. Y que tan diferentes son los resultados finales de ambos códigos?
C function => Float point number
My function => 0
parece que no leyó el archivo
You must discarding possible errors, see what is the seek value in each code. I think in english is more easy to you.
el problema está en la lectura. seek la posición son los mismos
Post the file, I want to test.
Después de algunas pruebas me di cuenta del problema, pero no puedo encontrar la solución. El problema es que la función BinaryReader no funcionan como fblockread.
Quizas sea un problema de conversión, empieza a comparar las 2 funciones con ejercicios simples, tomando en cuenta los tipos (Byte, Short, Long, Int).