Ezt hogyan kell leprogramozni?
Van egy koordináta rendszer.
Abban megvan adva egy téglalap 4 pontja.
Ezen kívül van még egy pont.
Arról kell eldönteni, hogy a téglalapon belül, kívül vagy a határon van.
Én úgy oldottam meg, hogy if ágba raktam, hogy ha az X pont nagyobb, mint a téglalap X max, vagy kisebb, mint az X min, akkor nincs benne.
Else if ágra tettem azt, benne van, ennek a fordítottja.
Else ágon futott a határ.
Ezt elég gány megoldásnak érzem.
Tudtok jobbat?
Ha programozol, el kell fogadnod, hogy nem minden megoldás lesz elegáns. Sőt... Sokszor a kevésbé elegáns megoldás a hatékonyabb.
Ha nekem kellene megoldani, akkor bevezetnék két egész típusú változót, amikben tárolom, hogy X és Y irányban milyen a viszonyul a téglalappal. Ha kívül van, akkor -1, ha rajta, akkor 0, és ha belül, akkor 1. Megvizsgálnám, hogy az X koordináta hogy viszonyul a téglalap oldalaihoz (csúcsaihoz), és ennek megfelelően álíltanám be az egyik változó értékét. Ez egy háromirányú elágazás, hogy konkrétan milyen módon valósítom meg, az nyelvtől is függ. (if... elsif ... else, stb.) Ugyanezt megcsinálom Y-ra is. Majd a két "állapot-változót" megvizsgálom. Ha mindkettő értéke 1, akkor a pont belül van. Ha legalább az egyik -1, akkor kívül van. Minden más esetben az oldalon van. De természetesen más úton is el lehet jutni a megoldáshoz.
Nem értem, miért kellett lepontozni a második hozzászólót. Nem vettem a fáradságot, hogy utánajárjak a koordinátáinak, meg hirtelenjében tippem sincs a megoldásra, de nyilvánvaló, hogy az első ötleted nem működik. Én csak rajzoltam egy példát:
Az E pont láthatólag kívül esik a téglalapon, holott mindkét irányban a maximum és minimum közé esik. Alighanem abban is igaza van a kollégának, hogy a feladatnak elsőként a geometriai megoldását kéne megtalálni, a program részletei még várhatnak.
Támadt azóta egy elvi ötletem, csak én nem tudom koordinátageometriára lefordítani. Ehhez is rajzoltam egy ábrát:
Számold ki az ABE, BCE, CDE, ADE háromszögek területét. Ha ezek összege nagyobb az ABCD téglalapénál, akkor az E pont a téglalapon kívül van. Ha azonos vele, akkor belül, vagy a határon. Az utóbbi eset abban különbözik, hogy a négy háromszög egyikének (az ábrán az ADE) területe nulla. Mivel nem kell meghatároznod, hogy a pont melyik oldalra esik, például úgy is vizsgálhatod ezt az eshetőséget, hogy a területeket összeszorzod – ha nullát kapsz eredményül, akkor valamelyik tényező is nulla volt. Minthogy ez önmagában is jelzi, hogy a pont a határon van, tetszés szerinti sorrendben építheted egymásra a vizsgálatokat.
Megemlítendő, hogy itt nyilván törtszámokat kell használnod, tehát gondolj az adatábrázolás pontatlanságára. Ennek megfelelően ne pontos egyenlőséget, hanem valami észszerűen kicsire vett tűrést vizsgálj.
#3: jogos. Nem mondta ki konkrétan, hogy az oldalaknakpárhozamosnak kell lenni a koordinátatengelyekkel. (Bár a megoldásában ő is már ezt feltételezte.)
Ez esetben viszont ez nem programozástechnikai, hanem koordinátageometriai feladat.
Ne haragudjatok.
Pontatlan voltam és nem írtam le, hogy párhuzamos.
Ezért nem foglalkoztam a többivel.
Hát ha párhuzamosak, akkor a feladat triviális; egyetlen if-el eldönthető...
A pont koordinátái x és y, a téglalap két szemközti sarka Xmin,Ymin és Xmax,Ymax akkor ha x>Xmin és x<Xmax és y>Ymin és y<Ymax, akkor a téglalapon belül van. Ellenkező esetben kívül...
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!