вопрос по функциям трансформации

Pixilang по русски
Post Reply
User avatar
phase
Posts: 17
Joined: Thu Dec 20, 2012 6:16 pm
Location: Хабаровск

вопрос по функциям трансформации

Post by phase » Sun May 10, 2015 3:22 pm

Доброго времени суток.
Заметил странность в работе функции t_point().
Так и должно быть что эта функция нормально вычисляет координаты вектора для градусов поворота от -89 до 89?
при +-90 и больше возникает переполнение в какой-нибудь координате. А если использовать t_translate() c не нулевыми параметрами то переполнение почти всегда. Судя по исходникам функции pix_vm_gfx_vertex_transform() в файле pixilang_vm_gfx.cpp координаты должны вычисляться при любой матрице.
вот пример кода с ошибкой.

Code: Select all

matrix=new(4,4,FLOAT)
V=new(3,FLOAT)
L=100 str2=""
screen=get_screen()
a=RED b=64


fn info($y){
t_get_matrix( matrix )
t_push_matrix() 
t_reset()
 sprintf(str2,"
[]=%f []=%f []=%f []=%f \n
[]=%f []=%f []=%f []=%f \n
[]=%f []=%f []=%f []=%f \n
[]=%f []=%f []=%f []=%f ",
matrix[0] ,matrix[1] ,matrix[2] ,matrix[3] 
,matrix[4] ,matrix[5] ,matrix[6] ,matrix[7] 
,matrix[8] ,matrix[9] ,matrix[10] ,matrix[11] 
,matrix[12] ,matrix[13] ,matrix[14]  ,matrix[15])
t_pop_matrix()
print(str2, 0, $y, WHITE, BOTTOM  )
}

fn trace($x0,$y0,$L,$a){
t_rotate($a,0,0,1)
info(90)
$x=$x0 while ($x<=$L)
{
 //t_translate(1,0,0)
 V[0]=$x V[1]=0 V[2]=0
 t_point(V)printf("x=%i y=%i \n",V[0],V[1])
screen[V[0]+$x0,V[1]+$y0]=a+(b-a)*$x/L
////dot($x,0,a+(b-a)*$x/L)
$x+1
}

t_reset()
}

info(0)
//trace(10,10,L,45)
trace(10,10,L,-90)


frame(-1)

User avatar
phase
Posts: 17
Joined: Thu Dec 20, 2012 6:16 pm
Location: Хабаровск

Re: вопрос по функциям трансформации

Post by phase » Wed May 13, 2015 1:28 pm

Уже разобрался. Надо было написать V=new(3,1,FLOAT), явно указать равномерность.

Post Reply