AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

tunnel problem

Ein Thema von gekmihesg · begonnen am 24. Mär 2004 · letzter Beitrag vom 24. Mär 2004
Antwort Antwort
gekmihesg
(Gast)

n/a Beiträge
 
#1

tunnel problem

  Alt 24. Mär 2004, 15:28
mir kam der tolle einfall eine procedur zu schreiben die einen tunnel zeichnet (oder eigendlich nur ein gitternetz eines tunnels).
eigendlich war mir nur gerade langweilig und jetzt bastel ich schon seit 2 tagen dran.
es funktioniert soweit ganz gut aber mit der perspektive haut was nicht richtig hin.
am besten einfach mal an nem image ausprobieren:

Delphi-Quellcode:
procedure Tunnel(cnv: TCanvas;width,height,d:integer;c1,c2,c3:TColor; cp: TPoint);
var
  i,a: integer;
  alpha,beta,n: real;
// width,height: breite/höhe des tunnels
// d: linienabstand
// c123: farben
// cp: mittelpunkt

  procedure cpc(var cnv: TCanvas); // farbe ändern
  begin
    if cnv.Pen.Color = c1 then
      cnv.Pen.Color:=c2
    else
      cnv.Pen.Color:=c1;
  end;

  function cpt(x,y: integer): integer; // "strahlensatz"
  begin
    if x = 0 then result := 0
    else result:=round(((x-i)/x)*y);
  end;

begin
  if cp.X = 0 then cp.X:=1;
  if cp.Y = 0 then cp.Y:=1;

  with cnv do // ecklinien zeichnen
    begin
      Brush.Color:=c3;
      FillRect(rect(0,0,width,height));
      Pen.Color:=c1;
      Pen.Width:=2;
      MoveTo(0,0);
      LineTo(cp.X,cp.Y);
      LineTo(width,0);
      MoveTo(0,height);
      LineTo(cp.X,cp.Y);
      LineTo(width,height);
      Pen.Width:=1;
    end;

  // links/rechts linien zum mittelpunkt
  i:=0;
  cpc(cnv);
  while i <= form2.Image1.Height do
    begin
      cnv.MoveTo(0,i);
      cnv.LineTo(cp.X,cp.y);
      cnv.LineTo(width,i);
      inc(i,d);
    end;

  // oben/unten linien zum mittelpunkt
  i:=0;
  cpc(cnv);
  while i <= width do
    begin
      cnv.MoveTo(i,0);
      cnv.LineTo(cp.X,cp.y);
      cnv.LineTo(i,height);
      inc(i,d);
    end;

  //querlinien

  //links
  i:=0;
  cpc(cnv);
  alpha:=arctan(d/cp.X);
  beta:=((Pi/2)-alpha)/2;
  n:=d;
  while i <= cp.X do
    begin
      cnv.MoveTo(i,cp.Y+cpt(cp.X,height-cp.Y));
      cnv.LineTo(i,cp.Y-cpt(cp.X,cp.Y));
      a:=round(tan(beta)*n);
      if a = 0 then break;
      inc(i,a);
      n:=tan(alpha)*(cp.X-i);
    end;

  //rechts
  i:=0;
  alpha:=arctan(d/(width-cp.X));
  beta:=((Pi/2)-alpha)/2;
  n:=d;
  while i <= width-cp.X do
    begin
      cnv.MoveTo(width-i,cp.Y+cpt(width-cp.X,height-cp.Y));
      cnv.LineTo(width-i,cp.Y-cpt(width-cp.X,cp.Y));
      a:=round(tan(beta)*n);
      if a = 0 then break;
      inc(i,a);
      n:=tan(alpha)*((width-cp.X)-i);
    end;

  //oben
  cpc(cnv);
  i:=0;
  alpha:=arctan(d/cp.Y);
  beta:=((Pi/2)-alpha)/2;
  n:=d;
  while i <= cp.Y do
    begin
      cnv.MoveTo(cp.X+cpt(cp.Y,width-cp.X),i);
      cnv.LineTo(cp.X-cpt(cp.Y,cp.X),i);
      a:=round(tan(beta)*n);
      if a = 0 then break;
      inc(i,a);
      n:=tan(alpha)*(cp.Y-i);
    end;

  //unten
  i:=0;
  alpha:=arctan(d/(height-cp.Y));
  beta:=((Pi/2)-alpha)/2;
  n:=d;
  while i <= height-cp.Y do
    begin
      cnv.MoveTo(cp.X+cpt(height-cp.Y,width-cp.X),height-i);
      cnv.LineTo(cp.X-cpt(height-cp.Y,cp.X),height-i);
      a:=round(tan(beta)*n);
      if a = 0 then break;
      inc(i,a);
      n:=tan(alpha)*((height-cp.Y)-i);
    end;
end;
irgendwie stimmt da was mit den querstrichen nicht. die passen nicht richtig in die perspektive.
wisst ihr wie mans besser macht?
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#2

Re: tunnel problem

  Alt 24. Mär 2004, 15:49
Ich habe es mal ausprobiert...

..die Perpektive ist doch völlig ok
..oder was stört dich?
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
gekmihesg
(Gast)

n/a Beiträge
 
#3

Re: tunnel problem

  Alt 24. Mär 2004, 15:55
nein an den ecklinien stimmen die querlienien nicht überein.
auserdem sind die einzellnen vierecke nur auf höhe des mittelpunkts wirklich quadratisch.

ich glaube mein problem ist ehr mathematischer natur.
Miniaturansicht angehängter Grafiken
screen_157.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#4

Re: tunnel problem

  Alt 24. Mär 2004, 15:58
Hi!

Häng das Bild doch bitte als JPG an. So isses einfach zu groß.

Danke.

Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#5

Re: tunnel problem

  Alt 24. Mär 2004, 16:01
ah jetzt versteh ich es..

..ich denke das ist ein Rundungsproblem
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
gekmihesg
(Gast)

n/a Beiträge
 
#6

Re: tunnel problem

  Alt 24. Mär 2004, 16:12
nein wenn man des ganze mit der mausbewegung koppelt sieht man des ganz gut.
aber ich glaub ich finde die lösung gerade. is nur noch rechenaufwändiger.
die querlinien dürfen nicht gerade sein...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz