Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Код анимирования. Крутящееся колесо

15K
12 декабря 2006 года
real_kas
17 / / 09.08.2006
Хотелось бы посмотреть как может выглядеть код крутящегося колеса (рисующийся тригонометрическими формулами). Кто знает как это осуществить? Язык программирования значения не имеет. Подойдёт любой.

Спасибо за ответы!
11K
12 декабря 2006 года
Salamansar
83 / / 29.11.2006
Ну, на счет самого колеса- не знаю но чтобы точка крутилась по окружности обычно применяют такие формулы:

X:=15*cos(ugl*180/pi);
Y:=15*sin(ugl*180/pi);

Где Х и Y - координаты точки; ugl- угол; 15-произвольно взятое число, которое обозначает радиус окружности.
Естественно это все надо заточить в цикл и постоянно изменять угол.

P.S. Думаю крутиться колесо заствить таким образом, привязав линии к этим точкам, не составит большого труда.
15K
13 декабря 2006 года
real_kas
17 / / 09.08.2006
Цитата: Salamansar
Ну, на счет самого колеса- не знаю но чтобы точка крутилась по окружности обычно применяют такие формулы:

X:=15*cos(ugl*180/pi);
Y:=15*sin(ugl*180/pi);

Где Х и Y - координаты точки; ugl- угол; 15-произвольно взятое число, которое обозначает радиус окружности.
Естественно это все надо заточить в цикл и постоянно изменять угол.

P.S. Думаю крутиться колесо заствить таким образом, привязав линии к этим точкам, не составит большого труда.



А например средствами JS или PHP это дело вожможно осуществить?

15K
13 декабря 2006 года
real_kas
17 / / 09.08.2006
Код:
<?php
function imagerotate(&$img, $ang, $bg=false, $width=false, $height=false, $bench=false) {
if($bench) $time = microtime();
if(!$bg) $bg = imagecolorallocate($img, 255,255,255);
// size of the image
$src_w = imagesx($img);
$src_h = imagesy($img);
// reduce angle
while($ang > 180) $ang = $ang-360;
while($ang < -180) $ang = $ang+360;
// угол > 90°
if($ang > 90) {
imagerotate($img, 90, $bg, $src_h,$src_w);
$ang = $ang - 90;
}
elseif($ang < -90) {
imagerotate($img, -90, $bg, $src_h,$src_w);
$ang = $ang + 90;
}
// размер изображения
$src_w = imagesx($img);
$src_h = imagesy($img);
if($ang != 0) {
// перевод градусов в радианы
if($ang > 0) $wrad = deg2rad($ang);
else $wrad = deg2rad((-1*$ang));
$sin = sin($wrad); if($sin < 0) $sin*=-1;
$cos = cos($wrad); if($cos < 0) $cos*=-1;
// размер изображения, после поворота
$dst_w = (int) ( $sin*$src_h + $cos*$src_w );
$dst_h = (int) ( $cos*$src_h + $sin*$src_w );
if($dst_w < 0) $dst_w *= -1;
if($dst_h < 0) $dst_h *= -1;
$scale_x = (int) ( $width/$dst_w );
$scale_y = (int) ( $height/$dst_h );
// создаем изображение и устанавливаем цвет фона
$dst_img = imagecreatetruecolor($dst_w, $dst_h);
imagefill($dst_img, 0,0, $bg);

for($i=0; $i<$src_h; $i++) {
for($j=0; $j<$src_w; $j++) {
// получаем новую позицию пикселя
if($ang > 0) {
$dst_x = (int) ( $sin*($src_h-$i) + $cos*$j );
$dst_y = (int) ( $sin*$j + $cos*$i );
}
else {
$dst_x = (int) ( $sin*$i + $cos*$j );
$dst_y = (int) ( $sin*($src_w-$j) + $cos*$i );
}
if($scale_x != 0) $dst_x = $dst_x*$scale_x;
if($scale_y != 0) $dst_y = $dst_y*$scale_y;
// получаем цвет данного пикселя
$col = imagecolorat($img, $j, $i);
// рисуем пиксель (рисуем два пикселя за раз чтобы избежать появления брешей/окон)
imagefilledrectangle($dst_img, $dst_x,$dst_y, $dst_x+1,$dst_y, $col);
}
}

// необходимо взять пробу
if($width!==false && $height!==false && ($width!=$dst_w || $height!=$dst_h)) {
$new_img = imagecreatetruecolor($width, $height);
imagefill($new_img, 0,0, $bg);
imagecopyresampled($new_img, $dst_img, 0,0,0,0, $width,$height, $dst_w,$dst_h);
imagedestroy($dst_img);
$img = $new_img;
}
else $img = $dst_img;
}
// не надо поворачивать, только взять пробу
elseif($width!==false && $height!==false && ($width!=$dst_w || $height!=$dst_h)) {
$dst_img = imagecreatetruecolor($width, $height);
imagefill($dst_img, 0,0, $bg);
imagecopyresampled($dst_img, $img, 0,0,0,0, $width, $height, $src_w, $src_h);
$img = $dst_img;
}
// ничего не надо делать
else $img = $dst_img;

if(!$bench) return;
// необязательная часть модуля, которая выводит данные работы функции
elseif($bench == "IMAGE") {
list($usec, $sec) = explode(" ",microtime());
$etime = (float)$usec + (float)$sec;
list($usec, $sec) = explode(" ",$time);
$etime -= (float)$usec + (float)$sec;
$etime = substr($etime, 0, 7);
imagefilledrectangle($img, 0,0, 42,12, imagecolorallocate($img, 255,255,255));
imagestring($img, 2, 0,0, $etime, imagecolorallocate($img, 0,0,0));
}
elseif($bench == "STRING") {
list($usec, $sec) = explode(" ",microtime());
$etime = (float)$usec + (float)$sec;
list($usec, $sec) = explode(" ",$time);
$etime -= (float)$usec + (float)$sec;
return $etime;
}
}
?>


Такой код использующий библиотеку GD пойдёт?
1.9K
20 декабря 2006 года
AxXxB
229 / / 21.11.2006
Цитата: real_kas
Хотелось бы посмотреть как может выглядеть код крутящегося колеса (рисующийся тригонометрическими формулами). Кто знает как это осуществить? Язык программирования значения не имеет. Подойдёт любой.



Могу подсказать на VB6. Надо создать PictureBox и Timer. Дальше следующий код:

Код:
Dim Ugl, CenterX, CenterY, Rad
'Угол, координаты центра колеса, радиус


Private Sub Timer1_Timer()
Ugl = Ugl + 1 / 180 * 3.14 'Прибавляем 1 радиан

X = Rad * Cos(Ugl) 'Это координаты для одного диаметра
Y = Rad * Sin(Ugl)

Picture1.Cls
Picture1.Circle (CenterX, CenterY), Rad 'Построение круга
Picture1.Line (CenterX, CenterY)-(CenterX + X, CenterY + Y) 'Построение диаметра
Picture1.Line (CenterX, CenterY)-(CenterX - X, CenterY - Y)

X = Rad * Cos(Ugl + 1.57) 'Это координаты для другого диаметра
Y = Rad * Sin(Ugl + 1.57)

Picture1.Line (CenterX, CenterY)-(CenterX + X, CenterY + Y) ''Построение диаметра
Picture1.Line (CenterX, CenterY)-(CenterX - X, CenterY - Y)
End Sub


Можно менять координаты центра - имитировать качение колеса. Вместо процедуры с таймером можно использовать и цикл.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог