Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2010, 09:43   #11
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...режим проекции в chart-е активирован по-умолчанию/
Изображения
Тип файла: jpg аксонометрия.jpg (36.8 Кб, 83 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 04.05.2010, 14:40   #12
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

эй, отпишись телО, которое ставит мне минус!
в личку хотя б, посмотреть на крысиное телО, кто такое
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 04.05.2010, 16:36   #13
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию

raxp, это не то. Надо например не парабола чтобы была построена, а параблоидальная гипербола (вроде как то так:D)
Вобщем то вы просто сделали график "пухленьким")))
Нужен какой то другой компонент..специально созданный для этого. в интернете что то не могу найти( На канве тоже рисовать не вариант.
Никому не поставить нас на колени! Мы лежали и будем лежать!
Rekky вне форума Ответить с цитированием
Старый 04.05.2010, 18:04   #14
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

в общем, что я вам скажу... учите OpenGL или >>> проекции <<<
Код:
// поверхность вращения ----------------------------------------------------------------
procedure Tpgl.test_sinxx(const Value: Boolean);
const r= 0.05; 
var i,j: integer;
    a,b,c: extended;
begin
 FTestPlace3D:= Value;
 if FTestPlace3D then begin

  //ñòðîèì z = x^2/2 + y^2-
  for i:=0 to strok do
   for j:=0 to stolb div 2 do begin
    val[i,j].name:= inttostr(i*j); //÷òîá ñòðîèëîñü, òèïà íå ïóñòîå
    //íàáèâàåì ñåòêó
    val[i,j].x:= j * r - (stolb div 2 div 2)*r;
    val[i,j].y:= i * r - (strok div 2)*r;
    //íàáèâàåì Z
    a:= r* abs(((strok-1)div 2)- i);
    b:= r* abs(((stolb div 2 -1)div 2)- j);
    c:= sqrt ((a*a) + (b*b));
    if (i= (strok-1)div 2)and(j= (stolb div 2 -1)div 2) then val[i,j].z:= 0 //fix-
     else val[i,j].z:= 0.5*( (val[i,j].x*val[i,j].x/2)+(val[i,j].y*val[i,j].y)  ) //
   end
 end
end;


procedure tpgl.paintPlace3d;
const position: array[0..3] of glfloat = (0.0, 0.0, 1.0, 1.0);
var i,j,nrm_count: integer;
    v  : tvertex;
    glpr: array [0..3] of glfloat;
begin
 glNewList(Place, GL_Compile);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glpr[0]:= 1.0;
  glpr[1]:= 1.0;
  glpr[2]:= 1.0; 

  // ÏÎÑÒÐÎÅÍÈÅ 3D ------------------------------------------------------------
  //if gl_cntrot<>0 then begin

  //íàáèâàåì íîðìàëè âñåõ òðåóãîëüíèêîâ-
  nrm_count:= 0;
  for i:= 0 to 499-1 do
   for j:=0 to 1499-1 do begin
    nrm[nrm_count]:= CalcNormal(val[i,j],val[i+1,j],val[i+1,j+1]);
    //if smooth=2 then nrm[nrm_count]:= CalcNormal2(val[i,j],val[i+1,j],val[i+1,j+1]);
    inc(nrm_count);
    nrm[nrm_count]:= CalcNormal(val[i+1,j+1],val[i,j+1],val[i,j]);
    //if smooth=2 then nrm[nrm_count]:= CalcNormal2(val[i+1,j+1],val[i,j+1],val[i,j]);
    inc(nrm_count)
  end;

  //----------------------------------
  //ñòðîèì ïîâåðõíîñòü òðåóãîëüíèêàìè-
  if smooth=1 then glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) //òèïà ñêåëåò-
   else glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
  gl_cnt_name:= 0;
  nrm_count:= 0;
  for i:= 0 to 499-1 do
   for j:=0 to 1499-1 do begin
    if (val[i,j].name<>'')and(val[i+1,j+1].name<>'')and(val[i+1,j].name<>'')and(val[i,j+1].name<>'') then begin 
    //inc(gl_cnt_name);
    //glLoadName(gl_cnt_name);
    glLoadName(strtoint(val[i,j].name));

    
    if check_DAT.Checked then begin
     //ïðîçðà÷íîñòü-
     glpr[3]:= gl_pr+((val[i,j].z + val[i+1,j].z + val[i+1,j+1].z)/3);
     glColor4fv(@glpr);
     //glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @glpr);
     //
     glBegin(GL_TRIANGLES); //1- òðåóã
      if (smooth=0)or(smooth=1) then begin
       v:= nrm[nrm_count]; inc(nrm_count);//CalcNormal(val[i,j],val[i+1,j],val[i+1,j+1]);
       glNormal3f(V.X,V.Y,V.Z)
      end;
      glNormal3f(val[i,j].y,val[i,j].x,val[i,j].z); //ñòàíäàðòíûé ìåòîä-
      //if smooth=5 then glNormal3f(normal[i,j].y,normal[i,j].x,normal[i,j].z); //íåñòàíäàðòíûé ìåòîä-
        glVertex3fv(@val[i,j]);    //1- âåðø
      glNormal3f(val[i+1,j].y,val[i+1,j].x,val[i+1,j].z);
      //if smooth=5 then glNormal3f(normal[i+1,j].y,normal[i+1,j].x,normal[i+1,j].z);
        glVertex3fv(@val[i+1,j]);  //2
      glNormal3f(val[i+1,j+1].y,val[i+1,j+1].x,val[i+1,j+1].z);
      //if smooth=5 then glNormal3f(normal[i+1,j+1].y,normal[i+1,j+1].x,normal[i+1,j+1].z);
        glVertex3fv(@val[i+1,j+1]);//3
     glEnd;

     //ïðîçðà÷íîñòü-
     glpr[3]:= gl_pr+((val[i+1,j+1].z + val[i,j+1].z + val[i,j].z)/3);
     glColor4fv(@glpr);
     //glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, @glpr);
     //
     glBegin(GL_TRIANGLES); //2- òðåóã
      if (smooth=0)or(smooth=1) then begin
       v:= nrm[nrm_count]; inc(nrm_count);//CalcNormal(val[i+1,j+1],val[i,j+1],val[i,j]);
       glNormal3f(V.X,V.Y,V.Z);
      end;
      glNormal3f(val[i+1,j+1].y,val[i+1,j+1].x,val[i+1,j+1].z);
      //if smooth=5 then glNormal3f(normal[i+1,j+1].y,normal[i+1,j+1].x,normal[i+1,j+1].z);
        glVertex3fv(@val[i+1,j+1]);
      glNormal3f(val[i,j+1].y,val[i,j+1].x,val[i,j+1].z);
      //if smooth=5 then glNormal3f(normal[i,j+1].y,normal[i,j+1].x,normal[i,j+1].z);
        glVertex3fv(@val[i,j+1]);
      glNormal3f(val[i,j].y,val[i,j].x,val[i,j].z);
      //if smooth=5 then glNormal3f(normal[i,j].y,normal[i,j].x,normal[i,j].z);
        glVertex3fv(@val[i,j]);
     glEnd;

     end
    end
  end;

  //
  glDisable(GL_BLEND);
 glendlist
end;
кстати, ваш >>> вопрос уже был <<<, правда не ваш/
Изображения
Тип файла: jpg вращение-2.jpg (130.7 Кб, 131 просмотров)
Тип файла: jpg вращение-3.jpg (220.3 Кб, 135 просмотров)
Тип файла: jpg гиперболоид.jpg (29.7 Кб, 74 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 05.05.2010, 15:30   #15
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...добавлю наглядности (видео) получаемого объекта через OpenGL
Вложения
Тип файла: zip aviwriter.zip (1.27 Мб, 12 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 05.05.2010, 16:40   #16
krGorka
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 35
По умолчанию

На самый простой случай для трехмерной графики можно воспользоваться компонентом TeeChart. Для 6 и 7 Delphi они отличаются. Сам компонент поищи в сети. Это Chart, но с большими возможностями

Последний раз редактировалось krGorka; 05.05.2010 в 16:55. Причина: Дополнение кодом
krGorka вне форума Ответить с цитированием
Старый 05.05.2010, 16:55   #17
krGorka
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 35
По умолчанию

примерный код



Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, TeEngine, TeeSurfa, ExtCtrls, TeeProcs, Chart;

type
  TForm1 = class(TForm)
    Chart1: TChart;
    Series1: TSurfaceSeries;//Из TeeChart
    BitBtn1: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
var i,j,n:integer;
    x,y,z:single;
begin
 series1.Clear;
  n:=100;
  for i:=0 to n do
  for j:=0 to n do
   begin
    x:=-5+10/n*i;
    y:=-5+10/n*j;
    z:=x*x+y*y;
    series1.AddXYZ(x,z,y,'',clTeeColor);
   end;
end;

end.
krGorka вне форума Ответить с цитированием
Старый 05.05.2010, 18:04   #18
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вас может быть удивит, но там тоже 3d на opengl ...да и не бесплатный этот teechart PRO/
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно построить график функции y:=k*e^x на Delphi Obender13 Помощь студентам 7 16.06.2009 16:30
Построить график температур в delphi Acyaa Помощь студентам 0 03.06.2009 18:31
Нарисовать точку, движущуюся в трехмерном пространстве Goldmane Помощь студентам 5 12.04.2009 20:14