Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sortowanie w MySQL, 3 warunki
--michu--
post
Post #1





Goście







Witam,
mam tabele z kolorami kolorami w RGB (kolumna R, kolumna G, kolumna cool.gif, chce je wyświetlić tak żeby kolor kolejnych rekordów przechodził płynnie. Czy jest sposób zeby zrobic sortowanie ktre warunkuja te 3 pola?
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


W ogole ciezko to zrobic
1. musisz wybrac kolor od ktorego zaczniesz
2. potem kolejny kolor (z pozostalych) ktory najmniej sie rozni (np. suma roznic skladowych kolorow do kwadratu, miedzy dwoma kolorami)
3. itd.

Ten post edytował dr_bonzo 1.02.2008, 15:20:37


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
nevt
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


jak wspomniał DR boznzo - jest to skomplikowane zagadnienie... popatrz na układy wzroców kolorów w różnych systemach (PANTONE, RAL itp.)... wydaje mi się niemożliwe ułożenie funkcji sortującej działającej poprawnie z każdym możliwym zestawem barw, bo oko ludzkie jest bardzo czułym i nieliniowym detektorem. Jeżeli ta tabela ma sensowne rozmiary (kilkaset do kilku tysięcy wpisów) - to najprostszym i najskuteczniejszym rozwiązaniem będzie dodanie do bazy kolumny nr_koloru i sortowanie wg niej. a wartości nr_koloru ustalić na podstawie przybliżeń do któregoś systemu wzorców palet...


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Może się przyda.
http://www.phpclasses.org/browse/package/1410.html


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


erix: ani troche

  1. <?php
  2. // sortuje kolory wg podobienstwa
  3. $colors = generateColors( 100 );
  4. $colorsx = array(
  5. array( 0, 0, 0 ),
  6. array( 20, 20, 20 ),
  7. array( 30, 30, 30 ),
  8. array( 40, 40, 40 ),
  9. array( 50, 50, 50 ),
  10. array( 60, 60, 60 ),
  11. array( 0, 0, 50 )
  12. );
  13. $sortedColors = sortColors( $colors );
  14. printColors( $sortedColors );
  15.  
  16. function generateColors( $n )
  17. {
  18. $min = 0;
  19. $max = 255;
  20. $colors = array();
  21. for ( $i = 0; $i < $n; $i++ )
  22. {
  23. $color = array();
  24. $color[] = rand( $min, $max );
  25. $color[] = rand( $min, $max );
  26. $color[] = rand( $min, $max );
  27.  
  28. $colors[] = $color;
  29. }
  30. return $colors;
  31. }
  32.  
  33. function sortColors( $colors )
  34. {
  35. $sorted = array();
  36. $sorted[] = array_pop( $colors );
  37. while ( ! empty( $colors ) )
  38. {
  39. // last color
  40. $last = end( $sorted );
  41.  
  42. // find closest one
  43. $nextIndex = findClosest( $colors, $last );
  44. $next = $colors[ $nextIndex ];
  45. // remove it from colors
  46. unset( $colors[ $nextIndex ] );
  47.  
  48. // add to sorted colors
  49. $sorted[] = $next;
  50. }
  51. return $sorted;
  52. }
  53.  
  54. function findClosest( $colors, $c )
  55. {
  56. // first as best
  57. $best = reset( $colors );
  58. $bestIndex = key( $colors );
  59. $bestDifference = calculateDifference( $c, $best );
  60. // search better
  61. foreach ( $colors as $i => $v )
  62. {
  63. $newDiff = calculateDifference( $c, $v );
  64. if ( $newDiff < $bestDifference )
  65. {
  66. $best = $v;
  67. $bestIndex = $i;
  68. $bestDifference = $newDiff;
  69. }
  70. }
  71. return $bestIndex;
  72. }
  73.  
  74.  
  75. function calculateDifference( $from, $to )
  76. {
  77. $sum = 0;
  78. $pow = 10;
  79. $sum += pow( $from[0] - $to[0], $pow );
  80. $sum += pow( $from[1] - $to[1], $pow );
  81. $sum += pow( $from[2] - $to[2], $pow );
  82. return $sum;
  83. }
  84. function printColors( $colors )
  85. {
  86. foreach ( $colors as $color )
  87. {
  88. printf( '<div style="background-color: rgb( %d, %d, %d ); width: 200px; height: 5px;"></div>', $color[0], $color[1], $color[2] );
  89. }
  90. }
  91.  
  92. ?>


co wy na to? smile.gif


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
nevt
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


tylko tyle, że podobieństwo współrzędnych w przestrzeni barw RGB (lub innego modelu) nie przekłada się wprost na podobieństwo odcieni barw ocenianych subiektywnie przez obserwatora...
trochę wiem na ten temat, bo wałkowałem go przez pół roku pisząc prace dyplomową na temat transformacji przestrzeni barw w zastosowaniach informatycznych...
na przykład: prawie każdy powie ci, że kolor jasno zielony (#8f8) jest bliższy ciemno zielonemu (#080) niż np. para szaro-zielony (696) i szaro-niebieski (#669) - a twoja funkcja zadziała odwrotnie bo ostania para jest położona bliżej siebie w przestrzeni RGB...
i to jest jeden z powodów powstania systemów palet wzorców barw... gdzie kolory ułożone są w sekwencje wg. subiektywnej oceny odcienia barwy a nie wartości RGB czy CMYK

Ten post edytował nevt 3.02.2008, 12:52:31


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


nevt: no ok, i ta tabela slownikowa z definicja kolorow to chyba najoczywistsze/prostsze rozwiazanie - tylko 16mln rekordow? :/

Moje rozwiazanie oczywiscie nie jest idealne, choc kolory sie ladnie ukladaja, to np. grupe czerwonych mozesz miec kilka razy, a na samym koncu dodawane sa kolory bardzo odlegle "kolorystycznie" od ostatniego.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
nevt
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


dr_bonzo - twoje rozwiązanie jest bardzo dobre - wypowiedzialem się tak szczegółowo tylko dlatego, że kolega nie określił, do czego potrzebne mu takie sortowanie... bo jeśli do np. aranżacji kolorów dla sklepu z farbami - to zdecydowanie powinien oprzec się o palety a nie RGB próbek...


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 01:04