Autor Zpráva
martik__
Profil
Zdravím, potřeboval bych pomoct s GD knihovnou, tedy spíš se způsobem jak udělat pomocí PHP jednu věc:

Představme si, že máme čtvercový obrázek s černým pozadím. Pomocí GD knihovny do něj nakreslíme třeba trojúhelník. Jeho vrcholy jsou dány souřadnicemi, díky kterým je může GD knihovna nakreslit. A teď ten problém - vygeneruju si náhodný bod B[x, y] a potřebuju zjistit, jestli tento bod B leží uvnitř toho dříve vytvořeného trojúhelníku.

Fakt budu moc vděčnej za jakoukoliv radu, protože už nevím co s tím :-)
Alphard
Profil
to není ani tak problém PHP nebo snad GD knihovny, k řešení stačí matematika

přepokládám, že pracujete s pravoúhlými souřadnicemi a jedno z řešení by mohlo být vést bodem B vodorovnou a svislou osu a spočítat, jestli je bod B po obou stranách na obou osách ohraničen

martik__
Profil
Ještě bych teda prosil příklad toho výpočtu ... díky
martik__
Profil
Ještě by teda prosil příklad toho výpočtu ... díky
Icepoint
Profil
varuju vas, jsem vysokoskolak, toto bude komplexni reseni :)
ok, budu to brat vsechno symbolickymi vypocty, nikoliv s cislama, snad to pochopis...
takze mame takovouhle situaci:

teda nejdrive si musime nadefinovat rovnice primek ... tedy:
zacnem primkou AB:
- vektor vAB=B-A = [Xb-Xa;Yb-Ya]
- tedy primka rovnice primky AB je aX + bY + c = 0 kde a a b jsou souradnice normaloveho vektoru a c je posun (ktery se dopocita dosazenim nejakeho bodu primky). normalovy vektor je kolmy, ten ziskame prohozenim souradnic vektoru primky a a naslednym vynasobenim jedne ze souradnic -1, tedy normalovym vektorem primky bude NvAB=[Ya-Yb; Xb-Xa], dosadime do obecne rovnice primky:
(Ya-Yb)X + (Xb-Xa)Y + c = 0
do rovnice disadime jeden z bodu (bud A nebo B), tim ziskame neznamou c, zde pro priklad dosazuji bod A charakterizovany souradnicemy [Xa, Ya]:
c=-(Ya-Yb)*Xa - (Xb-Xa)*Ya
z cehoz nam vznikne obecny tvar primky pAB:
(Ya-Yb)X + (Xb-Xa)Y -(Ya-Yb)*Xa + (Xb-Xa)*Ya = 0

takovymto zpusobem dopocitame vsechny ostatni primky, ktere definuji trojuhelnik...
(Ya-Yc)X + (Xc-Xa)Y -(Ya-Yc)*Xa + (Xc-Xa)*Yc = 0 (primka pAC)
(Yb-Yc)X + (Xc-Xb)Y -(Yb-Yc)*Xb + (Xc-Xb)*Yc = 0 (primka pBC)

dalsi veci je protahnout bodem Z vodorovou a svislou primku:
obecna rovnice vodorovne primky, protazene nejakym bodem je:
Y = konst. tedy, pro bod Z to bude
Y = Yz
pro svislou to bude podobne:
X = Xz
v obecnem rtvaru to bude takto:
Y - Yz = 0
X - Xz = 0
nyni, kdyz mame obecne tvary vsech primek, staci zjistit jejich spolecne body, ktere zjistime jednodusse vytvorenim soustavy rovnic primky vodorovne/svisle s jednou z primek tvorici trojuhelnik. Vysledkem nam budou souradnice pruseciku. Nyni musime porovnat souradnice bodu, ktere nam vzniknou. To uz snad dokazes vymyslet sam :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: