Пытался опробовать работу с компонентом 2-и 3d графики -Mathsoft 3-D Plot (TOpenGL)
как в Delphi, так и в C++ Builder прежде всего в режиме построения 3d
В Delphi при установке и работе с ним в приложении встетился с следующей проблемой 1)после инсталляции и работе с ним он при использовании на форме приложения имеет черный фон и соответственно отсутствие возможности увидеть график поверхности.
код ниже вроде не дает ошибок
procedure TForm1.bOKClick(Sender: TObject);
var i,j: integer;
begin
if (inp()<0) then exit;
vr := VarArrayCreate([0,n,0,n],varDouble );
dx:=(xb-xm)/N; dy:=(yb-ym)/N;
for i:=0 to N do
for j:=0 to N do
begin
x:=xm+i*dx; y:=ym+j*dy; z:=x*x+y*y;
vr[i,j] := z;
end;
OpenGL1.RemoveSurfaces;
OpenGL1.AddSurface(vr);
end;
в С++ Builder обращение к VarArrayCreate немного другое и не проходит оператор присваивания типа vr[i,j] := z;поэтому использовал массивы int bnd1[2] = {0,N}; для 2d и int bnd2[4] = {0,N-1,0,N-1}; для 3d
Для заполнения вариантного массива использовал PutElement код
int bnd1[2] = {0,N};
gArr = VarArrayCreate(bnd1,1,varDouble);
for (int i=0; i<=N;i++)
{y=2*sin(xn+i*dx); gArr.PutElement(y,i); }
благополучно работает и строит в 3d плоский график синусоиды
а код
int bnd2[4] = {0,N-1,0,N-1};
gArr = VarArrayCreate(bnd2,3,varVariant);
for (int i=0; i<=N;i++)
for (int j=0; j<=N;j++)
{
x=xn+i*dx; y=yn+y*dy;z=cos(sqrt(x*x+y*y));
gArr.PutElement(z,y,x);
}
приводит к выходу за границы памяти при 1-же обращении
Возможно неправилен выдов PutElement с 3 параметрами.
Заменил на gArr.PutElement(z,i*N+j); -ошибка не изменилась