|
|
Ja johogy mondod; a hanoira gondoltam mikor exponenciális müveletigényt irtam (2^n - 1)
|
|
|
Egy jó okot már felfedeztem a rekurzió használatára;
nevezetesen, ha több, esetleg változó méretű adat keletkezik minden rekurzió előtt.
Ekkor iteratíve le kell ezeket tárolni, mondhtani komplett szimulálni kell a vermet különböző listákkal, valamint (én ezt bsp-használatakor vettem észre) le kell tárolni mindenhol, hogy melyik ágban volt, meg ilyenek.. ezzel ugyan gyorsabb, de a 8 soros szimpla kódból 5 képernyőnyi elég bonyi kódhegy lesz, és nagyon sok a buglehetőség (pl túlcsordulás a szimlulált vermekben).
Ekkor értettem meg, hogy pl Quake-I-II-III -kban is miért van rekurzió a bsp használatakor.
Ennek ellenére nemrég mondta nagy viccesen az infótanárom, hogy "a programozók soha nem használják a rekurziót, mer' lassú " - faktoriálison sokan nem jutnak túl ott fenn..
|
|
|
hanoi tornyai... hmm tipikus példa a rekurzió alkalmazására, de állítólag meg lehet oldani nem rekurzívan is...bár sosem láttam rá pldát.
|
|
|
Nos a Hanoi tornyai problémát csak rekurzívan lehet ha jól tudom. Ezért van az hogy már viszonylag kis n ekre is kib. sok ideig tart még egy gépnek is.
|
|
|
minden problémát, aminek van rekurzív megoldása, meg lehet oldani iteratívan is. más kérdés, hogy bár alapból az emberi agy iteratívan gondolkodik (tisztelet a kivételnek  ), sokszor kézenfekvőbb a rekurzió alkalmazása.
szerintem nem érdemes nagy, sebességkritikus programokban rekurziót alkalmazni, mert lassú is, meg a veremtúlcsordulás veszélye is fennáll, meg talán debuggolni is nehezebb. de jó programozási gyakorlat a függvényhívások, a paraméterátadás és a stack működésének megértéséhez.
|
|
|
Szvsz a rekurzió azért van, hogy legyen, én még nem kerültem szembe olyan esettel, hogy ne lehetett volna megoldani mással...
pl for ciklussal gyakran lehet helyettesíteni
|
|
|
profi programokban amúgy milyen gyakran használnak rekurzív függvényeket?
különféle forráskódokban gyakran látok rekurziót, csak utálom, mert nem látom át mit is csinálnak
|
|
|
rekurzio müveletigényes (exponenciális) és memoriaigényes (gondold meg mindig el kell tárolni a stackben a regiszterek tartalmát meg a visszatérési cimet  )
szal akkor már inkább for ciklus 
de a matekosok meg azé vannak hogy ne kelljen for ciklus
|
|
|
jah, aztan majd megeszi a procit a fene xD
meg amugy is a tervezeshez is kellett, (hogy tudjam hogy az enemyknek hogy osszam el  ), szal ott eleg nehez rekurzivozni
de asylum megoldasa jo volt  thx~
|
|
|
irj ra egy rekurziv fugvenyt..
|
|
|
ferchild: hat a +ok voltak szamtani sorozat, de a masik nem.. ha jol tom.. xD
asylum:
|
|
|
a(n + 1) = (n + 1) * a0 + n(n + 1)
ahol a0 = 4
vagyis pl. a4 = 4 * 4 + 3 * 4 = 28
|
|
|
most lehet én vagyok hülye de ez véletlen nem egy számtani sor?
és annak van összegképlete 
a differencia meg 2
|
|
|
Hi
nemtom hogy jo helyre irok ,de kene egy kis segitseg ;;
egy rpg jatekban szeretnek szintlepes rendszert kidolgozni, de fogalmam sincs hogy milyenek az ilyenek..
szal amire en gondoltam (most csak egy pelda, ezert kis szamok  )
Szint - szintlepeshez szukseges xp
1 - 4
2 - 10
3 - 18
4 - 28
5 - 40
tehat ahogy eszrevettetek, minden 1es szintnel az elozo +2 pont kell meg a meglevon kivul
tehat
Szint - szintlepeshez szukseges xp - elozohoz kepest mennyivel novexik
1 - 4 - 4
2 - 10 - 6
3 - 18 - 8
4 - 28 - 10
5 - 40 -12
na ez szep es jo (nemtom hogy illik e RPGbe az ilyen gondolkodas, ha nem, szoljatok xD), de ezt hogy tudom kiszamolni?
tehat hogy a 20. szinten osszesen mennyi xpnek kell lennie a szintlepeshez
ugye ha for ciklussal kene, az sztem gaz lenne  szal ha lehet ilyet nem szeretnek.
Azt ki tom szamolni, hogy az elozo (tehat a 19. szint) hez kepest mennyivel no. ugye ez egy normal szamtani sorozat..
nade hogy a teljes xpnek mennyinek kene lenni, arrol foggalmam sincs......
pls help T_T
|
|
|
Köszi!
Igazából a kamerához kellett....A fizikára meg majd ODE-t, vagy valami mást fogok tanulni....
|
|
|
Idézet
Joga
Honnan lehet megtudni, hogy egy szakasz elmetsz-e egy háromszöget, és ha igen, akkor hol?
Nézz szét ezen az oldalon, itt kb az összes létező ütközés detektáló algoritmusról van infó:
http://www.realtimerendering.com/int/
|
|
|
Erre első körben azt mondanám, h olyan pontokat keress, amik:
rajta vannak a szakaszon,
és a háromszögön belül találhatóak.
A és B ponton által meghatározott szakasz egyenlete:
Kód: Av * t + Bv * (1-t)
ahol Av és Bv az a A és B pontba mutató vektorok, t pedig egy paraméter 0 és 1 között.
A fenti egyenletet ki lehet fejteni x,y,z koordinátákra.
Ezek után a kapott xyz koordinátás egyenleteket összehoznám a háromszög pontjaival: ahhoz hogy egy pont a háromszögön belül legyen ugye a 3 pontjának koordinátái egy feltételrendszert alkotnak.
szvsz ebből már ki kell h jöjjön valami
|
|
|
Még egy kérdés.....
Honnan lehet megtudni, hogy egy szakasz elmetsz-e egy háromszöget, és ha igen, akkor hol?
|
|
|
Idézet Joga :....
2: Nah szóval van három pont: A,B,C.....Ez ugye meghatároz egy síkot...Ez a sík pedig kettő részre vágja a teret....hogyan lehet megtudni, hogy pl D és E pont ugyanazon az oldalon vannak e?
.....
Rendezed 0-ra a sík egyenletét, az adott pontok koordinátáit behelyettesíted és az eredményeknek megnézed az előjelét, ha negatív a pont a sík alatt van, ha pozitív akkor felette.
Reality is almost always wrong. - House
|
|
|
Kettő kérésem lenne....:
1: Van ugye a talajkövető algoritmus, vagy mi, az kéne nekem, tehát, hogy a tárgy alatt lévő háromszögeket a tárgy pontosan kövesse.
2: Nah szóval van három pont: A,B,C.....Ez ugye meghatároz egy síkot...Ez a sík pedig kettő részre vágja a teret....hogyan lehet megtudni, hogy pl D és E pont ugyanazon az oldalon vannak e?
Felőlem angol nyelvű leírásokat is adhattok, nekem az is jó
|
|
|
Kösz a válaszokat, asszem akkor ezzel nem nagyon erőlködöm.
Reality is almost always wrong. - House
|
|
|
Idézet TheProGamer :
Van valakinek ötlete hogy hogyan lehet RGB kódból a hozzátartozó fény hullámhosszát kiszámolni?
Nem lehet. Az RGB ugyan több információt tartalmaz, mint a hullámhosz (pluszban színtelítettség és fényerő), viszont nem fedi le a teljes spektrumot. Néhány RGB érték megfelel a hullámhosszak egy részének. Pl. a (1,0,0)-hez 650 nm - 700 nm közötti hullámhossz is megfelel.
A legtöbb amit tehetsz, hogy fogsz egy táblázatot (pl. amit itt van), ahol néhány hullámhossznak szerepel az RGB értéke, majd mondjuk pl. legkisebb négyzetes hibaillesztéssel megkeresed az adott RGB-hez legközelebb álló hullámhosszt.
|
|
|
Szerintem ez mundán eszközökkel közelíti a lehetetlent. Szóval nemhiszem, hogy épeszű megoldást találnál rá, már csak azért is, mert a frekvencia egy skála, addig az rgb egy 3dimenziós tér. Valamelyest át lehet számítani (a bátyám világítás technikus, ő mesélt erről), de az fix, hogy nem egyszerű.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Nem ez kellene, hanem az hogy adott RGB(x,y,z) színhez milyen hullámhossz tartozik abban az esetben ha ez meghatározható (tehát az adott szín nem fehér,fekete vagy a kettő átmenete). X,y,z lehet bármilyen 1 és 0 közti szám.
Reality is almost always wrong. - House
|
|
|
hát ha átlag hullámhossz kell, akkor én úgy számolnám, h (red*a vörös hullámhossza+blue*a kék hullámhossza+green*a zöld hullámhossza)/3. a vörösnek, zöldnek, kéknek pedig 100, h fenn van a neten a hullámhossz értéke, de sztem még a négyjegyű fv. táblázatban is. de lehet, h félreérem a problémádat
|
|
|
Van valakinek ötlete hogy hogyan lehet RGB kódból a hozzátartozó fény hullámhosszát kiszámolni?
Reality is almost always wrong. - House
|
|
|
Nah, most van meg 
A hiba ott volt, hogy a két egyeneshez két különböző t érték tartozik...
Helyesen a két egyeneshez tartozó egyenletek:
Kód: e1:
x = Ax + ux * t1
y = Ay + uy * t1
z = Az + uz * t1
e2:
x = Bx + vx * t2
y = By + vy * t2
z = Bz + vz * t2
A metszéspontot a köv. képpen lehet kiszámítani:
Kód: e1 = e2 - ből a koordináták szerint kifejtve, majd átrendezve a következő adódik:
(ux * t1) - (vx * t2) = Bx - Ax
(uy * t1) - (vy * t2) = By - Ay
(uz * t1) - (vz * t2) = Bz - Az
A fenti egyenletrendszer végeredménye a két egyenes egyenletének t paramétere, ami nem feltétlenül egyenlő!
t1 -et vagy t2-t visszaírva megkapjuk a metszéspont koordinátáit, és ez így akkor is működik, ha a 3-ból csak 2 dimenziót használunk, a harmadikat pedig 0-nak hagyjuk.
Ha nincsen metszéspont, akkor az egyenletrendszernek elvileg nem lesz megoldása - ezt sajnos nem volt időm ellenőrizni, de majdnem biztos.
Jedi, kösz a helpet 
|
|
|
A feltételvizsgálatot a fórumon lehagytam, jogos...
Egyébként z-vel is ugyanez a helyzet...
Egyedül y-ra jön ki ebből, hogy 1...
...
hmmm, azt hiszem, most esett le!
Ha az y-ból kijött 1-et visszahelyettesítem a paraméteres egyenletbe, akkor kijön a többi...
x = Ax + t * ux 4 + 1 * (-2) = 2
y = Ay + t * uy 2 + 1 * (-1) = 1
z = Az + t * uz 1 + 1 * (-1) = 0
Akkor csak rosszul értelmeztem az eredményt...
Tehát, ha egyik komponensre sem lehet elvégezni az osztást, akkor párhuzamos, ha két különböző t-t kapok, akkor pedig nem metszi.
Köszi
Amin most beugrott még kérdésként:
Ezt a megoldást lehet büntetlenül alkalmazni akkor is, ha a 3 dimenziós pontból és irányvektorból a 3-ikat nem használom (ergó 2D-ként...) ?
gyors próba:
A( 1; 1; 0) u( 0; 1; 0 )
B( 3; 2; 0) v( 1; 0; 0 ) Metszéspont: X( 1; 2; 0 )
tx = (Ax - Bx) / (vx - ux) = (1 - 3) / (1- 0) = -2 / 1 = -2
ty = (Ay - By) / (vy - uy) = (1 - 2) / (0- 1) = -1 / -1 = 1
tz - re nem végezhető el
Elvileg ez azt jelentené, hogy nem metszik egymást, de...
X pont B ponttól x irányban pontosan -2 távolságra,
X pont A ponttól y irányban pedig pont 1 távolságra van...
Hmmm, érdekes... Hogy is van ez? 
Most már fáradt vagyok , holnap átgondolom
|
|
|
Idézet Orphy :
tx = (Ax - Bx) / (vx -ux)
Ehem, ehhez az osztáshoz már alapból kell egy feltételvizsgálat, hogy a (vx-ux) != 0, különben nem tudod átrendezni az egyenletet...
Az y komponensre el tudod végezni az osztást és meg is kapod, hogy t = 1. Ha egyik komponensre sem lehet elvégezni az osztást, akkor a két egyenes párhuzamos. Ha két komponensre különböző t értéket kapsz, akkor meg nem metszi egymást a két egyenes.
|
|
|
Ööö az elözö hozzászolásom törölve lett v mi? 
Ha igen akkor nem linkelem be megint
|
|
|
Ilyesmivel próbálkoztam, csak nem a t paraméterrel, hanem már átszámolva x,y,z koordinátákra...
Sajnos ezzel is ugyanaz a gondom van...
A(0) = (4;2;1), u( -2; -1; -1 )
B(0) = (4;0;1), v( -2; 1; -1 )
Ez a két egyenes elvileg az X( 2; 1; 0 ) pontban metszi egymást.
Ha a kezdőpontokhoz hozzáadjuk az irányvektort, mindkettőnél ezt a pontot kapjuk elsőre.
Viszont ha ezeket behelyettesítem:
tx = (Ax - Bx) / (vx -ux)
tx = (4 - 4) / [ (-2) - (-2) ]
tx = 0 / 0
|
|
|
Idézet Orphy :
Hmm, srácok, gondban vagyok 
Hogyan lehet megállapítani azt, hogy 2 3D-s egyenes hol metszi egymást?
Akárhogyan is próbálkoztam, 3 ismeretlenre csak 2 egyenletem volt...
Ha pedig az x,y,z koordinátákat kifejeztem, akkor meg számolásnál 0-val osztás jött ki valamelyikre...

Ha parametrikus formában írod fel, akkor a paraméterre meg tudod oldani (ha van metszéspont). Onnan meg visszahelyettesítve megkapod a metszéspontot.
Pl.
A(t) = A0 + t * u
B(t) = B0 + t * v
Azt kell nézni, hogy A(t) = B(t), azaz átrendezve:
A0 - B0 = t * ( v - u)
Ez 3D-ben három egyenlet, egy ismeretlennel (t).
Egyébként ezen az oldalon az 5.18-ban van egy egyenes-egyenes távolságszámító algoritmus, ami a legközelebbi pontokat is megadja. Ezt is lehet metszéspontszámításhoz használni.
|
|
|
Hmm, srácok, gondban vagyok
Hogyan lehet megállapítani azt, hogy 2 3D-s egyenes hol metszi egymást?
Akárhogyan is próbálkoztam, 3 ismeretlenre csak 2 egyenletem volt...
Ha pedig az x,y,z koordinátákat kifejeztem, akkor meg számolásnál 0-val osztás jött ki valamelyikre...
|
|
|
|
Köszi a segítséget, azt hiszem, körbenézek még ilyenolyan ánglish könyvekben is...
Egy matek-könyvtárat készítek játékhoz, és oda kellenének a dolgok...
Igaz, 2D-s játék lenne, de gondoltam, akkor már miért ne legyen felkészítve 3D-re is...
A fontosabb dolgokat - (egyenes-egyenes metszéspont, egyenes-pont távolság, egyenes-egyenes távolság, egyenes-kör ütközésvizsgálat) természetesen tudnia kell számolni...
Egyelőre még nem látom pontosan, a parametrikus megadással ezeket hogyan fogom, de régen is volt... Utánanézek
|
|
|
Idézet Orphy :
Hello,
keresgéltem Google-n, de cserben hagyott...
Az egyenes, kör, stb egyenletét keresem, 3D-re vonatkoztatva...
Tud valaki segíteni? 
Suliban is csak 2D volt, és neten is csak olyat találtam... 
Ezeket parametrikusan a legkönnyebb megadni.
Pl. A,B-n keresztülmenő egyenes egyenlete:
E(t) = A + (B - A) * t
Vagy egy köregyenelet:
K(t) = C + R * cos(t) * U + R * sin(t) * (N x U)
ahol
C a kör középpontja
R a sugár
P a középpontból a kör egyik pontja felé mutató egységvektor
N a kör síkjának normálvektora
(N x U) ez meg vektoriális szorzat akar lenni
|
|
|
Idézet Orphy :
Hello,
keresgéltem Google-n, de cserben hagyott...
Az egyenes, kör, stb egyenletét keresem, 3D-re vonatkoztatva...
Tud valaki segíteni? 
Suliban is csak 2D volt, és neten is csak olyat találtam... 
A térben nem kör, hanem gömb van nem? Na mindegy, h segítsek is neked: http://mathworld.wolfram.com/topics/Geometry.html. Remélem innen már el tudsz indulni.
No [img] !
Programozz ne háborúzz!!!!
|
|
|
Hello,
keresgéltem Google-n, de cserben hagyott...
Az egyenes, kör, stb egyenletét keresem, 3D-re vonatkoztatva...
Tud valaki segíteni?
Suliban is csak 2D volt, és neten is csak olyat találtam...
|
|
|
_____________________
C++ && OGL
|
|
|
Ahogy az öreganyó is mondta: határeset
|
|
|
Thanx, ez nagyon kellett.......
|
|
|
különböző tengelyekre különböző forgatási mátrixokat kell alkalmazni
Z tengely:
Kód: cosα sinα 0
-sinα cosα 0
0 0 1
/ezt 3x3-es mátrixot szorzod a ponttal (amit el akarsz forgatni) ami egy 1x3 as mátrix ugyebár (x,y,z)/
X tengely:
Kód: 1 0 0
0 cosα sinα
0 -sinα cosα
Y tengely:
Kód: cosα 0 -sinα
0 1 0
sinα 0 cosα
_____________________
C++ && OGL
|
|
|
Nem a forgatási mátrixxal? Nemvok benne biztos de vhogy igy néz ki
sin alfa cos alfa
-cos alfa sin alfa
Ha mondjuk a pont x,y akkor megszorzod ezzel a mátrixxal és megkapod az aflával elforgatott koordinátákat. Síkban megy 
Térben ez sztem akkor a z körüli forgatást jelenti (ami síkban nemlátszik mert merőleges rá de az origóban van)
|
|
|
Nem tudja valaki, h hogyan lehet elforgatni egy pontot a Y tengely körül alfával?
A kordinátarendszer opengl-es, nem az az egy síknegyedes fordított féle, amit a legtöbb pascalos unit használ, forgatásnál pedig elég pozitív számmal az óramutató járásával megegyező irányban fogatni.
|
|
|
Köszönöm, közben beast segített megoldani
MapStartX = 345;
MapStartY = 45;
COS_45 = 0.707106781186548;
SIN_45 = -COS_45;
TH = 30;
iso_side = TH * 1.414213
mp_X = tempX - MapStartX;
mp_Y = tempY - MapStartY;
mp_Y = mp_Y * 2;
p_X = (mp_X * COS_45 - mp_Y * SIN_45);
p_Y = (mp_X * SIN_45 + mp_Y * COS_45);
row = p_X / iso_side;
col = p_Y / iso_side;
col = Math.abs(col - 13) +1;
row = row - 1;
█▓▒░ All system gone, prepare for downcount! ➡ ➎➍➌❶ Offblast! ➔
|
|
|
Egy lehetséges megoldás:
az 1,1 pont balszélső sarkához viszonyítva (illetve gyakorlatilag bármilyen fix ponthoz viszonyítva) az egér koordinátái alapján 5 négyzet pontossággal meg lehet állapítani hol áll:

Ezt még tovább kell bontani négy kvadránsra, hogy a következő lépésben tudjuk, melyik élet kell vizsgálni.
Ezután a négyzetet határoló ferde egyenesek egyenletét kell kiszámolni. (Ami könnyen megvan, Pitagorasz-tétellel meredekség (ami ugye fix, tehát nem is kell élenként kiszámolni), pontnak meg jó az egyik sarokpont) Ha ez megvan, akkor már csak meg kell vizsgálni, hogy a kurzor a megfelelő él felett vagy alatt van-e (egyenes egyenlete alapján, pl. y-2 = 3x + 6 egyenlet esetén ha y-2 < 3x+6, ahol (x,y) a kurzor koordináták, akkor a kurzor az egyenes alatt van, ha nagyobb, akkor fölötte.)
|
|
|
█▓▒░ All system gone, prepare for downcount! ➡ ➎➍➌❶ Offblast! ➔
|
|
|
Nekem ilyenen nem problémázott, szóval nemtudom mi lehet vele a gond.
Nincs mit!
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Mostmár majdnem jó!! 
A lényeg, vagyis az eredmény jó, de kiiratás után el is száll a progi, "stack around the variable 'inpu' was corrupted" üzenettel. Azzal a változóval van a baja, amibe beolvasom a számot, pedig az is signed char típusú.
Mondjuk a lényeg az, hogy az eredmény jó, úgyis át kell írnom pascalosra!
KÖSZI!!!
|
|
|
Látszik, hogy siettem kajálni és nem írtam be a kódot.  Szóval elronottam a nevét a fv-nek, a bit eltoláskor kihagytam az értékadást. A hibát lehet, hogy az okozza nálad, hogy belenyúlok a paraméterbe, de nekem a VC nem visított, de azért javítottam.
Kód: signed char Sig(signed char szam2)
{
signed char result=0,szam=szam2;
result=result | (szam&128); result=result>>1;
result=result | (szam&128); result=result>>1;
result=result | (szam&128); result=result>>1;
result=result | (szam&128); result=result>>1;
result=result | (szam&128); result=result>>1;
result=result | (szam&128); result=result>>1;
result=result | (szam&128); result=result>>1;
result=result | (szam&128);
// Végigtoltuk az előjelbitet, eredmény a -1 2es komplemense,
// ha negatív a szám, ha nem, akkor 0
result= result | (szam&1); szam=szam>>1;
result= result | (szam&1); szam=szam>>1;
result= result | (szam&1); szam=szam>>1;
result= result | (szam&1); szam=szam>>1;
result= result | (szam&1); szam=szam>>1;
result= result | (szam&1); szam=szam>>1;
result= result | (szam&1);
// végig toljuk a hét adatbitet, és ha bármelyik egyes,
// beírjuk az eredmény utolsó bitjére
// a eddig nullán álltunk, akkor ez egyre változtat,
//ha -1en, akkor marad minden
return result;
}
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Legújabb project:
electronics
Legutóbb frissített project:
electronics
Friss kép a galériából:
|