Hogy kéne megoldani az alábbi problémát?
Delphiben probálkozok egy olyasmi dolgot kivitelezni, h egy kép komponensre random pontokat generálok. Azt szeretném elérni, h mikor a kép valamelyik szélére esik egy pont, akkor növeljevelje a kép méretét(x,y koordinátát) egy megadott értékkel pl 50-el. Ez egy ciklusba menne egy bizonyos méretig. Mondjuk max 500x500-ig.
Addig megvan, h kigenerálok pontokat. Azt is megtudtam oldani, h növekedjen a kép, de a megnövelt részbe már nem akar generálni pontokat, valamint a kettőt nem tudom összerakni, mivel nem tudom a széleket meghatározni.
Segítene esetleg valaki elkésziteni ezt a programot?
Hú,nagyon szépen köszönöm, h időt szántál rá/rám és megcsináltad. Kérhetnék hozzá egy kis magyarázatot? Ami az Application.ProcessMessages és a repaintot illeti?
(Ja és öregebb delphit használok lehet az a gond. Forráskódilag látom, h azt csinálja amit írtam, csak a képernyőn nem pont az jelenik meg nekem. Nálam úgy néz ki, h 500*500-ra generál random pontokat a legszélső 1 pixel széles sávot kihagyva. Szóval ha nem így kéne kinéznie leírnád h melyik verziójú delphit használtad? )
Delphi 7 - egyik legjobb -
myPixel.X := Random(PaintBox1.Width) + 1;
myPixel.Y := Random(PaintBox1.Height) + 1; soha nem lesz 0 az értékük, eredetileg kapott egy keretet és így maradt.
myPixel.X := Random(PaintBox1.Width + 1)...., így már nem marad le a széle.
Repaint -> újrarajzol
Application.ProcessMessages -> feldolgozza (engedi feldolgozni) a program közben érkező üzeneteket - vizuális megjelenítés -.
Kimaradt a FormCreate eljárásból a Randomize, de szerintem értelemszerűen beleírtad, gondolom :)
És még egy utolsó kérdésem lenne.
Néha úgy tűnik nekem mintha nem generálna ki annyi véletlen pontot mint ami megvan adva. Ez lehet attól h egymásra generálja ki őket? Vagy, h lehetne ezt kiküszöbölni?
(És mennyire lenne bonyolult azt kivitelezni, h mindig az adott méret kozepéről kezdjen el pontokat rajzolni? )
Természetesen megoldható, kell egy dinamikus TPoint típusú tömb és minden generálásnál ellenőrizni kell, hogy szerepel-e a tömbben, ha igen újat generálsz. Természetesen meg lehet oldani mással is, nem tudom mennyire vagy jártas a Delphi-ben.
A második kérdést talán kifejthetnéd jobban, azt szeretnéd, hogy egy 500x500-as négyzet közepéről indulna és egy algoritmus alapján terjeszkedne ?
Hát nem túlzottan, ezért is vannak ilyen kérdéseim. Mert alapvető ismeretek hiányoznak, h mit hogyan lehetne kivitelezni. Ilyen programokból tanulgatok. Variálok, értelmezem stb. Persze alapok vannak.
Az nem olyan fontos. Az elképzelés az volt, hogy 50*50-es "négyzetbe" kezd a program generálni. Ennek a négyzetnek közepéből kiindulva szórná a pontokat. Majd ha a negyzet szélére kerülne pont, akkor azt "eldobná (vagy kifehérítené)" és növelné megint 50-el a négyzetet. Ekkor a százszor százas négyzet közepétől indulva kezdené el megint szórni a pontokat. Szóval a hely annyira nem random. A kiindulási pont fix a többi a véletlen.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!