IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @199
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Beží Akcia na dvere

Zrušili sme príplatky za silnejší varianty! Zadarmo až 44mm + trojsklo www.perito.cz

Lutos -Luxusné schody z masívu

Obklad schodov masívnym drevom - jedinečná dominanta Vášho interiéru. www.lutos.sk

Schudla som 16 kg za 4 týždne

Zvládla som to! Bez obmedzovanial a bez športovania. Prečítajte si môj príbeh. www.janinblog.com

Problémy s nadváhou?

Zistite viac o dosiahnutí ľahšej a zdravšej hmotnosti. www.janinblog.com

Hľadáte 3 - izbový byt?

Najširšia ponuka nehnuteľností z celej SR a EÚ na najväčšom realitnom portáli! www.topreality.sk

vykreslovanie grafu

Zaslať odpoveď
AutorSpráva
Siriuse
Užívateľ
Užívateľ

Založený: 23.05.2009
Príspevky: 81
Bydlisko: Michalovce

PríspevokZaslal: Št 25.08.11 22:44Odpovedať s citátomNávrat hore

Zdravim, potreboval by som poradit. Mam canvas na ktory zlozitym vypoctom vykreslujem krivky grafu. Ked na graf vykreslim dve krivky tak mi prebehne funkcia vykreslujuca krivku dvakrat. Ked chcem vykreslit este jednu krivku tak musim resetnut cely canvas a vykreslit zasa vsetky tri krivky. Ked ich tam mam dajme tomu 20 uz fakt dlho trva. Resetujem graf zakazdym pretoze ked nahodou zobrazovanie jednej krivky vypnem neviem ju zmazat. Ako na to?

priklad pre lepsie pochopenie

mam canvas na ktory vykreslim graf funkcie x^2. Potom na neho vykreslim aj dajme tomu e^x. Potom log(x). Potom e^x chcem dat prec z canvasu bez toho aby som cely graf zmazal a znovu vykreslil tie dva. (pretoze to v mojom grafe je velmi zlozite).
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 936

PríspevokZaslal: Pi 26.08.11 10:46Odpovedať s citátomNávrat hore

no mozes prekreslit krivku ktoru chces vymazat tak ze ju zinvertujes, alebo si sprav viacvrstvovy system, kazda krivka bude na inej vrstve a pri zobrazovani sa budu vrstvy na seba ukladat alebo odtial odoberat tak ako to robia editory obrazkov.
Zobraziť informácie o autoroviOdoslať súkromnú správu
chrono
Skúsený užívateľ
Skúsený užívateľ

Založený: 13.11.2007
Príspevky: 808

PríspevokZaslal: Pi 26.08.11 13:08Odpovedať s citátomNávrat hore

Celkom by ma zaujímalo, ako veľký graf vykresluješ, keď to trvá tak dlho. Predpokladám ale, že tým vykresľovaním v skutočnosti myslíš výpočet a následné vykreslenie (a ak áno, tak ti nič nebráni si ten výpočet uložiť do poľa, aby si to potom nemusel počítať znovu).
Zobraziť informácie o autoroviOdoslať súkromnú správu
Siriuse
Užívateľ
Užívateľ

Založený: 23.05.2009
Príspevky: 81
Bydlisko: Michalovce

PríspevokZaslal: Pi 26.08.11 16:29Odpovedať s citátomNávrat hore

Hej... nie vykreslovanie ale vypocet presne som myslel, a ako by som spravil ten viacvrstvovy system? Grafy maju roznu farbu aby sa v nich dalo vyznat, preto to nepomoze invertovat. A ukladat kazdy graf do poli sa mi nepaci.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
chrono
Skúsený užívateľ
Skúsený užívateľ

Založený: 13.11.2007
Príspevky: 808

PríspevokZaslal: Pi 26.08.11 17:22Odpovedať s citátomNávrat hore

Viacvrstvový systém neurobíš nijako (pretože tie grafy sa budú prekrývať a to, čo je prekryté už nijako nezískaš).

Ak teda nechceš nič nikam ukladať, musíš sa zmieriť s tým, že to bude pomalé (ukladať môžeš napr. predrendrovaný obrázok či niečo podobné, ale pole s údajmi je výhodnejšie, pretože napr. ak ten graf zväčšíš dvojnásobne, tak už v tom poli polovicu bodov budeš mať vypočítanú).
Zobraziť informácie o autoroviOdoslať súkromnú správu
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 936

PríspevokZaslal: Pi 26.08.11 19:54Odpovedať s citátomNávrat hore

Siriuse, vcom je problem ? kreslis predsa na canvas . tak zacni kreslit kazdy graf na samostatny canvas a podla potreby si kopiruj obsah jedneho az n canvasov do toho ktory je na zobrazovanie.
kód:

img1.Canvas.CopyMode := cmSrcAnd ; //nastavis sposob kopirovania na taky aby sa obrazky zmiesali
img1.Canvas.CopyRect(rect(20,20,250,250),img2.canvas,rect(20,20,250,250)); // a tu vykonas skopirovanie

ked budes chciet niektoru z kriviek odobrat z grafu tak iba graf znovuvyskladas z canvasov ale bez canvasu na ktorom je krivka ktoru v grafe nechces. to je aj podla mna dostatocne rychle.

edit:

narychlo zbuchana ukazka
kód:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    img1: TImage;
    img2: TImage;
    img3: TImage;
    chk1: TCheckBox;
    chk2: TCheckBox;
    img4: TImage;
    chk3: TCheckBox;

    procedure chk1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.chk1Click(Sender: TObject);
begin
  img1.Canvas.FillRect(img1.ClientRect);
  img1.Canvas.CopyMode := cmSrcAnd ;
  if chk1.Checked then
    img1.Canvas.CopyRect(img1.Canvas.ClipRect,img2.canvas,img1.Canvas.ClipRect);
  if chk2.Checked then
    img1.Canvas.CopyRect(img1.Canvas.ClipRect,img3.canvas,img1.Canvas.ClipRect);
  if chk3.Checked then
    img1.Canvas.CopyRect(img1.Canvas.ClipRect,img4.canvas,img1.Canvas.ClipRect);

end;

procedure TForm1.FormCreate(Sender: TObject);

var i : Integer;
begin
img1.Canvas.FillRect(img1.ClientRect);
img3.Canvas.Pen.Color := clGreen;
img4.Canvas.Pen.Color := clBlue;


img2.Canvas.MoveTo(1,20);
img3.Canvas.MoveTo(1,20);
img4.Canvas.MoveTo(1,20);


for i :=0 to 360 do begin
img2.Canvas.LineTo(i*16,20-trunc(sin(i)*16));
end;
for i :=0 to 360 do begin
img3.Canvas.LineTo(i*16,20-trunc(sin(i+5)*16));
end;

for i :=0 to 360 do begin
img4.Canvas.LineTo(i*16,20-trunc(sin(i+10)*16));
end;


end;

end.
Zobraziť informácie o autoroviOdoslať súkromnú správu
vama
Užívateľ
Užívateľ

Založený: 20.11.2009
Príspevky: 213
Bydlisko: Myjava
Vek: 19

PríspevokZaslal: So 27.08.11 11:54Odpovedať s citátomNávrat hore

A co tak pouzit komponent urceny na vykreslovanie grafov - Chart?
Jednoducho sa snim pracuje, a mozes si snim invidualne vykreslovat, zmazavat krivky.

_________________
"Digitálna technika pozostáva len z 0 a 1, ktoré sú správny čas na správnom mieste." M. Valášek
Zobraziť informácie o autoroviOdoslať súkromnú správuOdoslať e-mailICQ
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd