Текущий архив: 2006.04.02;
Скачать: CL | DM;
ВнизНахождение высоты в заданной точке Найти похожие ветки
← →
Ricks © (2005-09-13 23:59) [0]У меня вот такая проблема:
Пусть функция f(x, z) задает высоту поверхности в узловых точкач (те x и z - целые, от 1 до n). Задача состоит в определении высоты поверхности в ЛЮБОЙ точке (те например т.M(X:0.76; Z:0.789) )
Помогите!
← →
Кефир87 © (2005-09-14 00:17) [1]Вот попробуй разберись. 8) Узлы у меня в матрице height[0..n1, 0..n2]... Вместо y можно указать z...
function TLand.GetHeight(x,y:GLfloat):GLfloat;
function Lerp( a, b, t: Single ): Single;
begin
Result := ( 1 - t ) * a + t * b;
end;
var
sx,sy:GLfloat;
tx,tz:GLfloat;
ya, yb,y0,y1,y2,y3:GLfloat;
x0,x1,x2,x3, z0,z1,z2,z3:integer;
begin
if(x>0)and(y>0)and(x<info.mWidth)and(y<info.mHeight)then
begin
x0 := trunc(x);
x1 := trunc(x)+1;
x2 := x0;
x3 := x1;
z0 := trunc(y);
z1 := z0;
z2 := trunc(y)+1;
z3 := z2;
y0 := heihts[trunc(x), trunc(y)];
y1 := heihts[trunc(x)+1, trunc(y)];
y2 := heihts[trunc(x), trunc(y)+1];
y3 := heihts[trunc(x)+1, trunc(y)+1];
tx := ( x - x0 ) / ( x1 - x0 );
ya := Lerp( y0, y1, tx );
yb := Lerp( y2, y3, tx );
tz := ( y - z0 ) / ( z2 - z0 );
Result := Lerp( ya, yb, tz );
{glMatrixMode(GL_MODELVIEW);
glPushMatrix;
glLoadIdentity;
glBegin(GL_POINT_BIT);
glvertex3f(trunc(x)*cell_width, heihts[trunc(x),trunc(y)]+0.01, trunc(y)*cell_width);
glvertex3f(trunc(x)*cell_width + cell_width, heihts[trunc(x)+1,trunc(y)]+0.01, trunc(y)*cell_width);
glVertex3f(trunc(x)*cell_width + cell_width, heihts[trunc(x)+1,trunc(y)+1]+0.01, trunc(y)*cell_width+cell_width);
glVertex3f(trunc(x)*cell_width, heihts[trunc(x),trunc(y)+1]+0.01, trunc(y)*cell_width+cell_width);
glEnd;
glBegin(GL_LINES);
glVertex3f(x-cell_width/2, 0.01, y);
glVertex3f(x+cell_width/2, 0.01, y);
glVertex3f(x, Result+0.01, y-cell_width/2);
glVertex3f(x, Result+0.01, y+cell_width/2);
glEnd;
glPopMatrix; }
end else Result := 0.0;
end;
← →
Ricks © (2005-09-14 01:11) [2]Спасибо, буду разбираться!
← →
Кефир87 © (2005-09-14 01:54) [3]Вообще эту функцию мне в свое время помогли создать в этой ветке. Поищи тему "Простейшая линейная интерполяция" 8)
← →
Ricks © (2005-09-14 02:17) [4]Спасибо огромное! Помогло!!
Только теперь возникла еще одна проблемма: наклон объекта (по x и z). Как получить соответствующие углы наклона. Я попытался, но у меня что-то не очень получилось. Вот код:
function TBasicUnit.ForwardPos;
begin
Result:=Vector( Center.X + cosex( angle.Y ) * MoveSpeed, 0, Center.Z - sinex( angle.Y ) * MoveSpeed );
Result.Y:=GetAHeight( Result.X, Result.Z )
end;
function TBasicUnit.SidePos;
begin
Result:=CrossVector( Vector( Center.X + cosex( angle.Y ) * MoveSpeed, 0, Center.Z - sinex( angle.Y ) * MoveSpeed ), Vector(0, 1, 0));
Result.Y:=GetAHeight( Result.X, Result.Z );
end;
// вот здесь!
procedure TBasicUnit.UpdateHeight;
var f : TVector;
begin
Center.Y:=GetAHeight( Center.X, Center.Z );
f:=ForwardPos; angle.z:=(f.y - center.y) / DistancePoints(f, center) * 180 / pi;
f:=SidePos; angle.x:=(f.y - center.y) / DistancePoints(f, center) * 180 / pi;
end;
← →
A22 © (2005-09-19 16:08) [5]tg(alpha) = b/a, где a - длина противолежащего катета, b - прилежащего
в чем проблема-то? :)
← →
XProger © (2005-09-19 16:34) [6]XTropper (http://XProger.mirgames.ru)
Высчитываются углы наклона пауков и пушек на поверхности ландшафта
← →
A22 © (2005-09-19 17:36) [7]2 Ricks
наоборот катеты, очепятался, сорри
а XTropper принципиально не смотри - заколебал! :)
← →
Ricks © (2005-09-19 22:53) [8]> A22
tg(alpha) = b/a
что такое alpha???
Мне нужны 2 угла (по x и z)
> XProger
сайт, не спорю, хороший, но где там искать я не знаю...
← →
XProger © (2005-09-20 01:17) [9]Ricks, в разделе скачать видимо...
← →
A22 © (2005-09-20 12:13) [10]Ricks, alpha - угол. Тебе нужно два угла - относителньо оси X и Z? тогда придется считать 2 отношения:
delta_y/delta_x, и delta_y/delta_z
в общем, это планиметрия школьная, класс за 9 максимум. подумай немного, нарисуй все на бумаге, приятно же самому решить задачу от начала до конца
← →
NE_Parovoz © (2005-09-20 16:11) [11]Ricks, нужны именно углы?, может сразу матрицу находить, из нормали
а XTropper, всетаки посмотри(если необязательно углы);
Страницы: 1 вся ветка
Текущий архив: 2006.04.02;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.04 c