[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: GD. Рисование линии под углом
welder
Люди добрые подскажите может ктонибуть уже видел какюнибуть самописную фунцию поворота лини под нужным углом ??

А то я в математике не шарю и поэтому все эти формулы вывести просто не под силу sad.gif


Но самое главное получается такая картина

Изображение

Тоесть начальные точки остаються не измены сдвиг идет почти одинаковый но достигнув определённого угла он наченает увеличиваться/уменьшаться





Спустя 23 минуты, 25 секунд (6.03.2007 - 17:43) 440hz написал(а):
тебе чего надо-то? где и какую линию поернуть?

Спустя 2 минуты, 13 секунд (6.03.2007 - 17:45) AlexBB написал(а):
поворот вектора (x, y) в двухмерном пространстве осуществляется умножением на матрицу поворота

cos A sin A
-sin A cos A

Где А - угол поворта в радианах

Спустя 4 секунды (6.03.2007 - 17:45) vasa_c написал(а):
Если правильно понял.
x1,y1 - начальные координаты.
alpha - угол
length - длина

x2 = x1 + sin( alpha )*length
y2 = y1 - cos(alpha ) * length

оно?

____
Блин, то неделями форум пустует, то только взялся ответить, а уже полстраницы ответов. :)

Спустя 26 секунд (6.03.2007 - 17:46) welder написал(а):
Цитата
тебе чего надо-то? где и какую линию поернуть?


Обычную линию рисовать под любум углом !! от 0 до 360 градусов !

Спустя 29 минут, 36 секунд (6.03.2007 - 18:15) welder написал(а):
Цитата

x2 = x1 + sin( alpha )*length
y2 = y1 - cos(alpha ) * length
оно?


К сажелению нет :( Както не стандартно себя ведёт каждые 10 градусов

Цитата
поворот вектора (x, y) в двухмерном пространстве осуществляется умножением на матрицу поворота

красиво сказал :) не мог бы ты обьяснить мне как тупому а то я тока слово поворот понял :)


Спустя 6 минут, 58 секунд (6.03.2007 - 18:22) vasa_c написал(а):
про то что alpha в радианах д.б. не забываешь?

Спустя 3 минуты, 32 секунды (6.03.2007 - 18:26) welder написал(а):
Цитата
про то что alpha в радианах д.б. не забываешь?

Забыл ;) Тоесть не знал :)

vasa_c, AlexBB, спасибо всё работает !

Спустя 6 минут, 5 секунд (6.03.2007 - 18:32) AlexBB написал(а):
Вообще-то первая же ссылка в Яндексе по запросу "умножение матриц" дает ответ.

Ну да ладно ... разжевываю
Точка с координатами (x,y) при повороте перейдет в точку с координатами (x * cos a - y * sin a, y * cos a + x * sin a)
Сосбственно все.

Сразу предупреждаю, что таким макаром хорошо работать с векторными данными. А вот растр повернуть так не получится в силу дискретности изображения на мониторе - дырки выйдут. Там алгоритм несколько усложняется, делается несколько трансформаций.

Ну вот, пока писал длинный ответ все получилось.

Спустя 21 час, 15 минут, 5 секунд (7.03.2007 - 15:47) welder написал(а):
Цитата
Ну вот, пока писал длинный ответ все получилось


Серавно спасибо, ибо буду знать как всё это происходит, чтоб в следующий раз такие вопросы не задавать..

Спустя 1 день, 21 час, 37 минут, 32 секунды (9.03.2007 - 13:24) welder написал(а):
Спасибо всем кто помог мне !!! Я выиграл спор, что сделаю часы на PHP !! К сожалению не смогу поделиться с вами уже выигранным ящиком пива...


вот результат работы скрипта:
Изображение

размеры часов количество стрелок и их цвет можно менять.

Часовая зона на сервере у меня оказываеться другая :) потом переделаю =)

P.S: поменял :)

Спустя 1 час, 59 минут, 30 секунд (9.03.2007 - 15:24) vasa_c написал(а):
Исходники бы показал, так вообще зачот бы был.

Спустя 2 часа, 23 секунды (9.03.2007 - 17:24) welder написал(а):
Цитата
Исходники бы показал, так вообще зачот бы был.

я сейчас его хочу под ООП сделать а пока код очень грубый
PHP
  1.  
  2. <?php
  3.  
  4. $kvadrat =200;
  5.  
  6.  
  7.  
  8. function стрелка($image,$время,$делитель,$цвет) {
  9. GLOBAL $kvadrat,$center;
  10. $alpha = (360/$делитель)*$время;
  11. $length = ($kvadrat/2) - 45;
  12. $alpha = deg2rad($alpha);
  13. $x2 = $center + sin($alpha)*$length;
  14. $y2 = $center - cos($alpha) *$length;
  15. imageline ($image, $center, $center, $x2, $y2,$цвет);
  16. }
  17.  
  18. function цифровое_табло($image){
  19. GLOBAL $kvadrat,$center;
  20. for($value=1; $value<=12; $value++) {
  21. $length = ($kvadrat/2) - 20;
  22. $alpha = (360/12)*$value;
  23. $alpha = deg2rad($alpha);
  24. $x2 = $center + sin($alpha)*$length;
  25. $y2 = $center - cos($alpha)*$length;
  26. $font = (preg_match ("/3|6|9|12/",$value))?3:1;
  27. imagestring($image, $font,$x2-3,$y2-5, $value, 0xFFFFFF);
  28. }
  29. }
  30.  
  31. function точки_табло($image){
  32. GLOBAL $kvadrat,$center;
  33. for($value=1; $value<=60; $value++) {
  34. $length = ($kvadrat/2) - 33;
  35. $alpha = (360/60)*$value;
  36. $alpha = deg2rad($alpha);
  37. $x2 = $center + sin($alpha)*$length;
  38. $y2 = $center - cos($alpha)*$length;
  39. $color = 0xc0ff00;
  40. $plus = 1;
  41. if (ereg("5$|10|20|25|35|40|50|55",$value)) { $color = 0xc06000;$plus = 2;}
  42. if (ereg("15|30|45|60",$value)) {$color = 0xc00000;$plus = 3;}
  43. imagefilledrectangle ($image, $x2, $y2, $x2+$plus, $y2+$plus,$color);
  44. }
  45. }
  46.  
  47.  
  48. $center = ($kvadrat/2);
  49.  
  50. header("Content-type: image/png");
  51. $image = imagecreatetruecolor($kvadrat,$kvadrat);
  52. imagefill($image, 0, 0, 0x000000);
  53.  
  54. //час
  55. стрелка ($image,date("g"),12,0xc00000);
  56. //минуты
  57. стрелка ($image,date("i"),60,0xc06000);
  58. //секунды
  59. стрелка ($image,date("s"),60,0xc0ff00);
  60. цифровое_табло($image);
  61. точки_табло($image);
  62.  
  63. //вывод
  64. imagepng($image);
  65. imagedestroy($image);
  66.  
  67.  
  68. ?>
  69.  

Спустя 52 минуты, 9 секунд (9.03.2007 - 18:16) AlexBB написал(а):
Название функций по русски???????????????
Мне даже в голову не приходило попробовать такое ... а ведь действительно работает. Чудеса да и только. Но все равно глаз режет.

Спустя 24 минуты, 18 секунд (9.03.2007 - 18:41) welder написал(а):
Цитата
Название функций по русски???????????????

помойму php единственный язык который подерживает латиницу в названиях переменных и фукциях, классах..

Цитата
Но все равно глаз режет.

Ну когда пишеш быстый код для того чтоб он просто работал русский очень удобен

Спустя 1 день, 1 минута, 26 секунд (10.03.2007 - 18:42) vasa_c написал(а):
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.