Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: работа Mathsoft 3-D Plot (TOpenGL) в С++  (Прочитано 4849 раз)
0 Пользователей и 1 Гость смотрят эту тему.
eugrita
Помогающий

ru
Offline Offline

« : 21-03-2011 00:08 » 

Пытался опробовать работу с компонентом 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); -ошибка не изменилась
« Последнее редактирование: 21-03-2011 00:29 от eugrita » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines