Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-06-2008
colx007 colx007 is offline
Registrado
 
Registrado: jun 2008
Posts: 2
Poder: 0
colx007 Va por buen camino
Graficar superficies en 3d

Hola,

¿Cómo puedo graficar superficies o mapas a partir de datos en 3 coordenadas (x, y, z)?

Gracias
Responder Con Cita
  #2  
Antiguo 16-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
te dejo un ejemplo para graficar funciones. Como ves, esta sacando las z de una funcion. Si tu creas un array donde colocas tu mapa de valores, entonces solo tendras q hacer z := mapa[x][y]; Esta funcion por eso es muy simple: pierde escala, etc... deberàs usar normalizadores varios (factores q multipliquen a las x e y en i,j) para tener una proyeccion más correcta.

Código Delphi [-]
unit proyect;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure DrawLine(x,y,z : integer);
    function  Cl(z : integer; mx : integer) : TColor;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses math;

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
        x,y,z : integer;
begin

        for y := 300 downto -300 do
        for x := 600 downto -600 do
        begin
                z := Round(150*cos(PI*x/100)*sin(PI*y/200));
//                z := Round(150*Sin((x + y)/100));
                DrawLine(x,y,z);
                Application.ProcessMessages;
        end;
end;

procedure TForm1.DrawLine(x,y,z : integer);
var
        cx,cy : integer;
        i,j   : integer;
begin
        cx := Width div 2;
        cy := Height div 2;

        i := x - Round(-1.3*y) + cx;
        j := cy - y;

        Canvas.Pen.Color := Cl(z,150);
        Canvas.MoveTo(i,j);
        Canvas.LineTo(i,j-z)
end;

function TForm1.Cl(z : integer; mx : integer) : TColor;
begin
        if z > 0 then
        Cl := TColor(Round($FF*z/mx)*$000101)
        else
        Cl := TColor(Round($FF*-z/mx)*$010000);
end;

end.

me entretengo a ver si saco lo mismo con un array...
Responder Con Cita
  #3  
Antiguo 18-06-2008
colx007 colx007 is offline
Registrado
 
Registrado: jun 2008
Posts: 2
Poder: 0
colx007 Va por buen camino
Gracias, pero estoy programando en Builder c++ 6. De todas formas voy a ver cuales funciones me sirven.
Responder Con Cita
  #4  
Antiguo 18-06-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
bueno la traduccion es sencilla. Saludos.

Última edición por coso fecha: 21-06-2008 a las 10:53:08.
Responder Con Cita
  #5  
Antiguo 24-06-2008
BC++ BC++ is offline
Miembro
 
Registrado: ene 2008
Posts: 44
Poder: 0
BC++ Va por buen camino
graficar en 3d

Hola Amigo del foro, esto hice una vez. lo saque de navegar por internet y fui agregando cosas a mi modo, lo que hace este programa, es una funcion en 2d SIMPLE Y SENCILLA (1RO) .
(2DO) hago una funcion en 3D,con el concepto de que una figura en 3d se arma a partir de la suma de los planos la misma funcion en (x,y) , en (z,x) y (z,y) y las muestro por separadas(a estos planos) y por ultimo uno los 3 planos para mostrarlo ( podes con el ScrollBar ROTAR Y GIRARLO).

Soy principiante en el tema pero por esas cosas de la vida te puede servir.
Saludos.

BC++

te dejo el codigo, lo unico q tenes q hacer es poner en el form. TImages y botones

//----------------------CODIGO-------------------------------------------

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <math.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
double f(double ,double );
void __fastcall TForm1::Button1Click(TObject *Sender)
{ //ejemplo para 2d grafico unicamente los ejes
int Maxx=Image->Width;
int Maxy=Image->Height;
//Traza el eje X
Image->Canvas->MoveTo(0,Maxy/2);
Image->Canvas->LineTo(Maxx,Maxy/2);
//Traza el eje Y
Image->Canvas->MoveTo(Maxx/2,0);
Image->Canvas->LineTo(Maxx/2,Maxy);

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{ //grafico un seno, y lo superpongo sobre el eje x,y q cree en el boton de arriba
int Maxx=Image->Width;
int Maxy=Image->Height;
//Traza el eje X
Image->Canvas->MoveTo(0,Maxy/2);
Image->Canvas->LineTo(Maxx,Maxy/2);
//Traza el eje Y
Image->Canvas->MoveTo(Maxx/2,0);
Image->Canvas->LineTo(Maxx/2,Maxy);
//Declarando funciones que van a ser utilizadas
float x,y,var=0.01,xini=-10,xfin=10,posx,posy;
//Graficando la función en si
for(x=xini;x<xfin;x+=var)
{ y=sin(x);
posx=x*Maxx/(xfin-xini);
posy=y*Maxx/(xfin-xini);
Image->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clRed;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int Maxx=Image1->Width;
int Maxy=Image1->Height;
//Traza el eje X
Image1->Canvas->MoveTo(0,Maxy/2);
Image1->Canvas->LineTo(Maxx,Maxy/2);
//Traza el eje Y
Image1->Canvas->MoveTo(Maxx/2,0);
Image1->Canvas->LineTo(Maxx/2,Maxy);
//Declarando funciones que van a ser utilizadas
float x,y,z,var=0.1,xini=-10,xfin=10,posx,posy;
//Graficando la función en si
for(x=xini/3;x<xfin/3;x+=var)
{ for(z=xini/3;z<xfin/3;z+=var)
{ y=f(x,z);//y=sin(x)+z; //Llamada a una función ya definida
posx=x*Maxx/(xfin-xini);
posy=y*Maxx/(xfin-xini);
Image1->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clRed;
posx=x*Maxx/(xfin-xini);
posy=z*Maxx/(xfin-xini);
Image2->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clRed;
posx=y*Maxx/(xfin-xini);
posy=z*Maxx/(xfin-xini);
Image3->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clRed;
}
}
}
//--------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)
{
int Maxx=Image1->Width;
int Maxy=Image1->Height;
Image4->Canvas->Pen->Color = clWhite;
Image4->Canvas->FillRect(Rect(0,0,Maxx,Maxy));
Image4->Canvas->Pen->Color = clBlack;

float Elev=ScrollBar1->Position*(2*M_PI)/100;
float Giro=ScrollBar2->Position*(2*M_PI)/100;
float x,y,z,var=0.1,xini=-10,xfin=10,posx,posy,x2D,y2D;
for(x=xini/3;x<xfin/3;x+=var)
{ for(z=xini/3;z<xfin/3;z+=var)
{ y=f(x,z);
x2D= x*cos(Elev)-z*sin(Elev);
y2D=-x*sin(Elev)*sin(Giro)+y*cos(Giro)-z*cos(Elev)*sin(Giro);
posx=x2D*Maxx/(xfin-xini);
posy=y2D*Maxx/(xfin-xini);
Image4->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clGreen+clBlue;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
Button5Click(this);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ScrollBar2Change(TObject *Sender)
{
Button5Click(this);
}
//---------------------------------------------------------------------------
double f(double x,double z)
{ return sin(x*x+z)*exp(x);
//return sqrt(z*z+x*x)*sin(x*x);
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int Maxx=Image1->Width;
int Maxy=Image1->Height;
//Traza el eje X
Image1->Canvas->MoveTo(0,Maxy/2);
Image1->Canvas->LineTo(Maxx,Maxy/2);
//Traza el eje Y
Image1->Canvas->MoveTo(Maxx/2,0);
Image1->Canvas->LineTo(Maxx/2,Maxy);
//Declarando funciones que van a ser utilizadas
float x,y,var=0.01,xini=-10,xfin=10,posx,posy;
//Graficando la función en si
for(x=xini;x<xfin;x+=var)
{ y=sin(x);
posx=x*Maxx/(xfin-xini);
posy=y*Maxx/(xfin-xini);
Image1->Canvas->Pixels[Maxx/2+posx][Maxy/2-posy]=clBlue;
}
}
//------------------------------------------------------------------------
//------------------------------------------------------------------------

SUERTE!!
pD: Si alguno conoce la direccion Web de este codigo tendria que agregarlo, yo no me acuerdo lamentablemente.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Graficar vía API Google MAXIUM Varios 0 20-05-2008 17:15:33
Graficar Funciones jack10 C++ Builder 6 18-06-2007 21:12:26
Graficar lineas bosterito Gráficos 1 13-02-2007 17:13:57
¿Grandes superficies pequeños cerebros? marcoszorrilla La Taberna 11 04-10-2006 08:13:25
Graficar En 3d En Delphi jose_2057111 Gráficos 1 26-11-2004 09:33:05


La franja horaria es GMT +2. Ahora son las 12:29:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi