matematykaszkolna.pl
losowanie 3 liczb spełniających zależność seth: Pół matematyczne − pół informatyczne zadanie: Chciałbym wylosować kolor o zadanej jasności. Kolor kodują trzy liczby r,g,b w zakresie 0−255 Formuła na jasność: j=0.299r2 + 0.587g2 + 0.114b2 lub dla uproszczenia: j=αr2 + βg2 + γb2 Jak łatwo policzyć, j może być również w zakresie 0−255 Mogę wylosować jedną liczbę podając zakres losowania, np. 0−255. Pytanie: jak wylosować te 3 liczby tak, by spełniały zależność tej formuły? Czyli, jakie kolejno zakresy podać podczas losowania tych trzech liczb? Wg mojego rozumowania, należy to wykonać w 3 krokach: 1.losowanie r − zakres musi uwzględniać j 2.losowanie g − zakres musi uwzględniać j oraz wylosowane r 3.podstawienie j,r,g do formuły − powstaje równanie z 1 niewiadomą, z którego obliczamy b
22 sie 16:23
daras: mozesz losować w ciemno
22 sie 16:58
seth: ok losuję w ciemno: j=0 losowanie: r=255, g=255 obliczam b b=j2−0,299r2−0,587g20,114=0−0,299*65025−0,587*650250,114−505369,73 Otrzymujemy pierwiastek z l. ujemnej − sprzeczność
22 sie 17:08
daras: przecież nie możesz wylosowac 2x tej samej liczby emotka
22 sie 17:12
seth: dlaczego nie? zresztą gdybym wylosował 255 i 254 to również otrzymałbym pierwiastek z ujemnej.
22 sie 17:14
daras: chyba masz sprzeczność w rachunkach jak z dowolnych 3 dodatnich liczb, w dodatku podnoszonych do2 może wyjść coś ujemnego
22 sie 17:14
daras: przecież każde liczby z tego przedziału spełniają tę formułę, sam stwierdziłeś , ze łatwo to policzyć
22 sie 17:15
seth: wcale tego nie napisałem. To był warunek podstawowy − dziedzina. Żeby liczba miała sens jako składnik koloru, musi być w zakresie 0−255. Ale to nie oznacza, że każde 3 dowolne liczby z tego zakresu będą spełniać to równanie dla każdego j.
22 sie 17:17
Trivial: Skąd masz ten wzór na jasność. On chyba wygląda tak: J = 0.299R + 0.587G + 0.114B
22 sie 17:17
seth: Są różne wersje tego wzoru. Próbuję po kolei aż któryś mi przypasuje. Wziąłem go z http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
22 sie 17:19
Trivial: Można wylosować 3 liczby R,G,B ∊[0,255] a potem przeskalować zgodnie ze wzorem żeby się zgadzała jasność.
22 sie 17:30
seth: ee, zgodnie z jakim wzorem? Tym moim? W jaki sposób przeskalować?
22 sie 17:31
Trivial: Policzyć jasność dla wylosowanych R,G,B: L2 = 0.299R2 + 0.587G2 + 0.114B2 Chcemy mieć kolor o jasności J, skalujemy wylosowane liczby o faktor c: J2 = 0.299c2R2 + 0.587c2G2 + 0.114c2B2 Skąd:
 J2 

= 0.299R2 + 0.587G2 + 0.114B2 = L2
 c2 
 J 
Zatem c =

.
 L 
22 sie 17:38
seth: Dzięki, to wygląda na bardzo proste i eleganckie rozwiązanie. Wypróbuję w praktyce.
22 sie 17:44
Trivial: Proszę: http://ideone.com/c5FuHz
22 sie 17:52
Trivial: Hmm to podejście nie do końca działa gdy c > 1. Hmm...
22 sie 18:03
asdf: Formuly ktora wskazal Trivial o 17:17 jest chyba najodpowiedniejsza, po co przesadzac, kombinowac? J − jasnosc...to dziala tez jako robienie obrazu czarnobialego, np. piksel−kolorowy = x = [r, g, b]; chcesz zrobic czarnobialy: piksel−czarnobialy = [r*0.299, g*0.587, b*0.114] ja bym tu nie kombinowal, bo zadanie jest na tyle proste, ze az nie warto!
25 sie 20:58
Trivial: asdf, gdzie tutaj jest sposób generowania piksela o zadanej jasności?
25 sie 21:23
asdf: aha...oj, zle przeczytalem zadanie − na szybkiego napisalem. to co napisalem to badziewie!
25 sie 23:11