Jump to content

Int

Expert
  • Posts

    3,339
  • Joined

  • Last visited

  • Days Won

    30

Everything posted by Int

  1. Int

    Случайность

    Я уже два года как работаю Синусы-то запомнить не сложно, а вот химия дольше месяца в голове не держится. Ещё одна задача со случайными величинами: Имеется стальная рельса толщины... ну 20 см. В неё стреляют 10 разными патронами, порядок которых выбираются случайно. У патронов разная масса, они абсолютно твёрдые и абсолютно гладкие. Посчитать, какой по счёту патрон (в среднем из 100 опытов) пробьёт рельсу насквозь. После каждого выстрела патроны из отверстия вынимаются.
  2. Int

    Случайность

    Готово, формулы пересчитаны при помощи школьного друга Массы планет я постарался подобрать так, чтобы картинки были покрасивее. А то с оригинальными на траекторию влияло в основном Солнце. Правда, Меркурий до сих пор не у дел. <? define('pi','3.1415926'); //Число пи, очевидно define('Earth_mass',5.9736e24); //Масса Земли, кг define('Earth_radius',6371000); define('G',6.673e-11*Earth_mass/pow(Earth_radius,2)); //Гравитационная постоянная, пересчитанная в массы Земли и астрономические единицы define('dt',0.0002); //Относительный элементарный отрезок времени (чем меньше, тем больше инераций цикла будет рассчитано) define('axel_debug',0); //Константа включает отрисовку ускорений, используется для дебага $ix=800; $iy=800; $radius_mult=15; //Коэффициент для радиусов планет $orbit_mult=60; //Коэффициент для радиусов орбит //Дальше все величины идут относительные (по отношению к земным) //$orbit=array(0,0.38,0.72,1,1.52,5.20,9.54,19.22,30.06); //Астрономические радиусы орбит //$radius=array(109,0.382,0.949,1,0.53,11.2,9.41,3.98,3.81); //Астрономические радиусы планет и Солнца //$masses=array(332946,0.06,0.82,1,0.11,318,95,14.6,17.2); //Реальные массы планет и Солнца $orbit=array(0,0.38,0.72,1,1.52,2.90,3.54,4.22,6.06); //Адаптированные радиусы орбит $radius=array(2,0.382,0.949,1,0.43,1.2,1.41,1.98,1.81); //Адаптированные радиусы планет $masses=array(450,0.06,0.82,1,0.11,31,9,14.6,17.2); //Адаптированные массы планет $alphas=array(); //Угловые отклонения планет от нуля for ($i=0; $i < sizeof($masses); $i++) $alphas[]=mt_rand(0,2*pi); //Случайное угловое смещение планеты в радианах //Характеристики влетающего тела $p_radius=0.5; //Радиус $p_x0=round($ix-$ix/80); //Начальные координаты $p_y0=round($iy/20 +mt_rand(1,$iy/10)); $v0=mt_rand(2,1500); //Скаляр вектора начальной скорости $va=mt_rand(91,190)*pi/180; //Угол, под которым влетает тело (центр координат - в центре тела, а не в Солнце) $im=imagecreatetruecolor($ix,$iy); $fill=imagecolorallocate($im,230,255,230); $black=imagecolorallocate($im,0,0,0); //Чёрный, для всего $blue=imagecolorallocate($im,0,0,255); $mercur=imagecolorallocate($im,50,50,200); $earth=imagecolorallocate($im,100,200,250); $venus=imagecolorallocate($im,80,200,150); $mars=imagecolorallocate($im,250,80,80); $saturn=imagecolorallocate($im,100,80,20); $uran=imagecolorallocate($im,200,200,200); $neptun=imagecolorallocate($im,20,140,140); $sun=imagecolorallocate($im,230,230,90); //Цвет Солнца $obj=imagecolorallocate($im,40,40,210); //Цвет летящего тела $trace=imagecolorallocate($im,150,100,100); //Цвета планет $colors=array($sun,$mercur,$venus,$earth,$mars,$black,$saturn,$uran,$neptun); imagefill($im,0,0,$fill); //Рисуем Солнце и планеты for ($n=0;$n < sizeof($masses); $n++) { $color=$colors[$n]; //цвет планеты $plan_alpha=$alphas[$n]; //Случайное угловое смещение планеты в радианах $plan_x=round($ix/2+$orbit[$n]*cos($plan_alpha)*$orbit_mult); $plan_y=round($iy/2+$orbit[$n]*sin($plan_alpha)*$orbit_mult); $plan_radius=round($radius_mult*$radius[$n]); //Радиус планет (одинаков по обоим направлениям) imagefilledellipse($im,$plan_x,$plan_y,$plan_radius,$plan_radius,$color); } $iter=5/dt; //Число итераций цикла $x=$p_x0; //Первоначальный расчёт координат начиается из начальной точки тела $y=$p_y0; $vx=$v0*cos($va); //Состаляющие начальной скорости $vy=$v0*sin($va); for ($f=0; $f < $iter; $f++) //Расчёт движения { $p_orbit=sqrt(pow($x-$ix/2,2)+pow($y-$iy/2,2))/$orbit_mult; //Расстояние от Солнца до тела $ax=$ay=0; //Составляющие равнодействующей сил всех планет и Солнца for ($n=0; $n < sizeof($masses); $n++) { $x0=$ix/2+$orbit[$n]*$orbit_mult*cos($alphas[$n]); //Экранное начало центра координат, от корого будем вести расчёт углов $y0=$iy/2+$orbit[$n]*$orbit_mult*sin($alphas[$n]); //Угол отклонения тела от нулевого направления относительно Солнца //Лучшего метода расчёта что-то не смог найти if ($x == $x0) $a=pi/2; //Тут арктангенс не определён поэтому делаем ручные расчёты else $a=atan(($y-$y0)/($x-$x0)); //Угол отклонения от горизонтали силы, действующей на тело со стороны $n-й планеты if ($x > $x0) $a=pi+$a; //Так нужно, см. геометрические расчёты $dR=sqrt(pow($x-$x0,2)+pow($y-$y0,2))/$orbit_mult; //Расстояние между телом и планетой $A=G*$masses[$n]/($dR*$dR); //Ускорение $ax+=$A*cos($a); $ay+=$A*sin($a); } if (axel_debug) imageline($im,$x,$y,$x+$ax/(0.1*$mass_mult),$y+$ay/(0.1*$mass_mult),$blue); //Рисуем ускорения $x+=$vx*dt+$ax*dt*dt/2; //А вот и новые координаты $y+=$vy*dt+$ay*dt*dt/2; $vx+=$ax*dt; //Скорость изменилась под действием ускорения $vy+=$ay*dt; $point_r=1; if (axel_debug) $point_r=2; imagefilledellipse($im,$x,$y,$point_r,$point_r,$trace); //Отрисовали промежуточную точку траектории } imagefilledellipse($im,$p_x0,$p_y0,$p_radius*$radius_mult,$p_radius*$radius_mult,$obj); imagerectangle($im,0,0,$ix-1,$iy-1,$black); header('Content-type: image/gif'); imagegif($im); imagedestroy($im); ?> Кому интересно, мои геометрические построения: http://pic.rapidshare.ru/1238317 http://pic.rapidshare.ru/1238318
  3. Int

    Случайность

    Начало работать с одним Солнцем, нашёл пару очень грубых ошибок. Уже выходит на эллиптические орбиты. Теперь буду добавлять планеты А где это в школе php проходят? Если тебе нужен совсем примитив, задавай телу случайные скорость и направление движения и в конце указывай, упадёт оно на Солнце или нет Никакой графики, только текст.
  4. Int

    Случайность

    Эээ. Ты же не думаешь это сдавать? ) К тому же, тут Солнце себя неадекватно ведёт, похоже, что оно не притягивает, а отталкивает. А то и вовсе никак не действует, не хочется мне с этим разбираться. А может и не отталкивает, а просто неправильно притягивает во всех четвертях кроме первой. Переделываю весь скрипт. Нашёл кучу ошибок. И масса влетающего тела тоже не нужна.
  5. Int

    Случайность

    Не знаю, что получилось, какие-то весьма странные результаты, пришлось в паре мест сильно ушаманить, но всё равно ничего не изменилось. Короче, вот: <? define('pi','3.1415926'); //Число пи, очевидно define('Earth_mass',5.9736e24); //Масса Земли, кг define('Earth_radius',6371000); define('G',6.673e-11*Earth_mass/pow(Earth_radius,2)); //Гравитационная постоянная, пересчитанная в массы Земли и астрономические единицы define('dt',0.0002); //Относительный элементарный отрезок времени (чем меньше, тем больше инераций цикла будет рассчитано) $ix=800; $iy=800; $radius_mult=15; //Коэффициент для радиусов планет $orbit_mult=60; //Коэффициент для радиусов орбит //Дальше все величины идут относительные (по отношению к земным) //$orbit=array(0,0.38,0.72,1.0,1.52,5.20,9.54,19.22,30.06); //Астрономические радиусы орбит //$radius=array(109,0.382,0.949,1.0,0.53,11.2,9.41,3.98,3.81); //Астрономические радиусы планет и Солнца //$masses=array(332946,0.06,0.82,1.0,0.11,318,95,14.6,17.2); //Реальные массы планет и Солнца $orbit=array(0,0.40,0.72,1.0,1.52,2.20,3.31,4.22,6.15); //Адаптированные радиусы орбит $radius=array(2.5,0.382,0.949,1.0,0.53,2.2,1.41,1.98,1.81); //Адаптированные радиусы планет $masses=array(332946,0.06,0.82,1.0,0.11,318,95,14.6,17.2); //Адаптированные массы планет $alphas=array(); //Угловые отклонения планет от нуля for ($i=0; $i < sizeof($masses); $i++) $alphas[]=mt_rand(0,359)*pi/180; //Случайное угловое смещение планеты в радианах //Характеристики влетающего тела $p_radius=0.5; //Радиус $p_mass=0.5; //Масса $p_x0=round($ix-$ix/80); //Начальные координаты $p_y0=round($iy/20+mt_rand(1,$iy/10)); $v0=mt_rand(1,400); //Скаляр вектора начальной скорости $va=mt_rand(91,219)*pi/180; //Угол, под которым влетает тело (центр координат - в центре тела, а не в Солнце) $im=imagecreatetruecolor($ix,$iy); $fill=imagecolorallocate($im,230,255,230); $black=imagecolorallocate($im,0,0,0); //Чёрный, для всего $venus=imagecolorallocate($im,80,200,150); $earth=imagecolorallocate($im,50,50,200); $mars=imagecolorallocate($im,250,80,80); $saturn=imagecolorallocate($im,80,60,20); $uran=imagecolorallocate($im,200,200,200); $neptun=imagecolorallocate($im,20,140,140); $sun=imagecolorallocate($im,230,230,90); //Цвет Солнца $obj=imagecolorallocate($im,40,40,210); //Цвет летящего тела $trace=imagecolorallocate($im,140,100,100); //Цвета планет $colors=array($sun,$black,$venus,$earth,$mars,$black,$saturn,$uran,$neptun); imagefill($im,0,0,$fill); //Рисуем Солнце и планеты for ($n=0;$n < sizeof($orbit); $n++) { $color=$colors[$n]; //цвет планеты $plan_alpha=$alphas[$n]; //Случайное угловое смещение планеты в радианах $plan_x=round($ix/2+$orbit[$n]*cos($plan_alpha)*$orbit_mult); $plan_y=round($iy/2+$orbit[$n]*sin($plan_alpha)*$orbit_mult); $plan_radius=round($radius_mult*$radius[$n]); //Радиус планет (одинаков по обоим направлениям) imagefilledellipse($im,$plan_x,$plan_y,$plan_radius,$plan_radius,$color); } $iter=5/dt; //Число итераций цикла $x=$p_x0; //Первоначальный расчёт координат начиается из начальной точки тела $y=$p_y0; $vx=$v0*cos($va); //Состаляющие начальной скорости $vy=$v0*sin($va); for ($f=0; $f < $iter; $f++) //Расчёт движения { $p_orbit=sqrt(pow($x-$ix/2,2)+pow($y-$iy/2,2))/$orbit_mult; //Расстояние от Солнца до тела //Угол отклонения тела от нулевого направления относительно Солнца //Лучшего метода расчёта что-то не смог найти if (($x >= $ix/2) && ($y <= $iy/2)) //Первая четверть { if ($iy/2 != $y) $p_alpha=atan(($x-$ix/2)/($iy/2-$y)); else $p_alpha=pi/2; } elseif (($x > $ix/2) && ($y > $iy/2)) //Вторая четверть $p_alpha=pi/2-atan(($x-$ix/2)/($y-$iy/2)); elseif (($x <= $ix/2) && ($y >= $iy/2)) //Третья четверть { if ($iy/2 != $y) $p_alpha=pi+atan(($ix/2-$x)/($y-$iy/2)); else $p_alpha=3*pi/2; } else //Четвёртая четверть $p_alpha=2*pi-atan(($ix/2-$x)/($iy/2-$iy)); $Fx=$Fy=0; //Составляющие равнодействующей сил всех планет и Солнца for ($n=0; $n < sizeof($masses); $n++) { //Расстояние между очередной планетой и телом (по теореме косинусов) $dR=sqrt(pow($p_orbit,2)+pow($orbit[$n],2)-2*$orbit[$n]*$p_orbit*cos($p_alpha-$alphas[$n])); $F=G*$p_mass*$masses[$n]/($dR*$dR); //Величина вектора силы //Угол вектора силы от горизонтали (на картинке), находим по теореме синусов if ($n != 0) $angle=$p_alpha-asin($orbit[$n]*sin($alphas[$n]-$p_alpha)/$dR); else //Для СОлнца посчитаем отдельно, а то какой-то косяк выходит $angle=2*pi+$p_alpha; $dFx=-$F*cos($angle); $dFy=$F*sin($angle); $Fx+=$dFx; $Fy+=$dFy; } //На этом этапе у нас есть проекции сил, известна скорость тела к данному моменту времени и его координаты. Двигаем тело с ускорением в течение времени dt $ax=$Fx/$p_mass; //Ускорение, сообщаемое телу системой планет $ay=$Fy/$p_mass; $x+=$vx*dt+$ax*dt*dt/2; //А вот и новые координаты $y+=$vy*dt+$ay*dt*dt/2; $vx+=$ax*dt; //Скорость изменилась под действием ускорения $vy+=$ay*dt; imagefilledellipse($im,$x,$y,1,1,$trace); //Отрисовали промежуточную точку траектории } imagefilledellipse($im,$p_x0,$p_y0,$p_radius*$radius_mult,$p_radius*$radius_mult,$obj); imagerectangle($im,0,0,$ix-1,$iy-1,$black); header('Content-type: image/gif'); imagegif($im); imagedestroy($im); ?>
  6. Int

    Случайность

    Есть случайная расстановка планет на картинке Пойду кино погляжу, потом продолжу. Завтра даже скорее всего. Не вижу ничего гениального, обычная геометрия. Проекции на плоскость строить умеешь? Я делаю двухмерный вариант, а то с трёхмерным возни слишком уж много, да и на статичной картинке будет смотреться не очень понятно. Кому нужны задроты-математики, такие сидят на rsdn.ru +)
  7. Int

    Случайность

    А, ну если в 8, то ладно Хорошо, постараюсь сварганить такую штуковину, вспомню молодость. У меня как раз есть час времени. Траектория рассчитывается путём разбиения времени на маленькие кусочки, в течение которых тело движется. Чем меньше каждый кусок, тем точнее и глаже будет нарисованная траектория. Перед каждым перемещением тела заново высчитываются все влияющие на него силы, тем самым получая действующее на него ускорение. Но вроде бы это из физики девятого класса (в моё время было). У кого есть радиусы и массы планет, Солнца и радиусы орбит? O:-) О, у википедии. Я чуть изменю задачу. Тело будет лететь с одной и той же стороны, только масса и скорость будут разные, зато положения планет будут произвольными.
  8. http://www.w3.org/TR/2003/CR-css3-text-200...4/#text-shadows Щас заговнят, что в IE его вообще нету...
  9. Int

    Случайность

    Сделать могу, но вот с визуализацией будут сложности Движущиеся планеты будет тяжело изобразить. А статичные довольно просто. Единственная сложность будет, если вектор входа в систему будет под углом к плоскости орбит планет. Тут пойдут и огромные расчёты и проекции при рисовании. Помню, в школе на паскале и не такое рисовали //Про синусы и косинусы рассказывают примерно в 7-м классе. Точнее не помню. //А в предыдущем посте описана игра Жизнь, и в заявленном виде (пуск-стоп) на php её реализовать не получится
  10. Int

    Случайность

    Подробнее про рулетку? о_О Посетитель делает ставку в рублях, ты случайно выбираешь номер. Если он угадал, ты ему платишь, если он не угадал - забираешь рубли себе Ммм.. ну из интересного могу ещё такое придумать: С Солнечную систему влетает метеорит/комета/планета (в этом и есть часть элемента случайности). Рассчитать и нарисовать его траекторию в зависимости от начальных характеристик. Учитывать притяжение всех 8 планет, Солнца, пояса астероидов (хотя бы приблизительно) и псяческого Плутона. Наальное положение планет так же рандомно. В процессе продвижения прилетевшего тела планеты движутся.) Ну и потом поглядеть сколько раз в Землю врежется Для расчётов нужа будет одна формула (F=G*M*m/R^2) и немного геометрии. Для движения планет, правда, ещё одна (y=R1*sin(u); x=R2*cos(u); R1, R2 - радиусы эллиптической орбиты). Масса, вектор и начальная точка влетевшего тела случайны.
  11. Кто ж так топики обзывает? Я вот не хочу ходить по ссылкам, а может именно я знаю, где достать то, что ищется. Автор ССЗБ.
  12. Int

    Случайность

    Рулетку напиши
  13. Какая буферизация может помочь ускорить загрузку 10 картинок? У тебя буферизуется только текст <img src="0.jpg"><img src="1.jpg">, сами картинки не сожмутся и не закэшируются, и браузер так же будет их подгружать по одной. PHP тут вообще не к теме. Думаю, тут нужно делать фоновую загрузку на javascript, а по её окончании выводить уже их на места.
  14. Проблема не в php. Проблема в html. Сравни код, который должен получиться, с тем, что у тебя выдаёт скрипт. А потом ищи где накосячил. Если ошибка возникает в echo '<dvi></div>', вовсе не значит, что ошибка в php, намёк понятен?
  15. Если появилась белая полоса - это уже не php вина.
  16. А ссылку-то на какой быдлячий сайт дали. Ну нельзя же отсылать на ресурсы школоты-то Так можно?
  17. Да div'ом, наверное, лучше всего будет.
  18. Может MySQL, делайте. Делается часто с помощью мыши, но некоторые делают выбор при помощи клавиатуры.
  19. Даже на бесплатных хостингах рарешено использование <?, так что врядли есть много мест, где эта функция отключена.
  20. //Класс Тут был Вася interface _vasya { public function Vasya(); //Вася делает ку } class vasya implements _vasya { public function Vasya() { echo 'ку'; $realKU=Hitrovidelannayafunkcia(); //Поулчаем правильный ку } }
  21. Int

    Категории

    Можно было бы сделать ещё один параметр - уровень вложенности, ну а дальше рекурсивная процедура, строящая структуру меню. Или же вместо рекурсии два вложенных цикла. Первый - по уровню, второй - по элементам этого уровня for ($level=0; $level < $maxlevel; $level++) while($elem = GetNextElem($level)) BuildMenu($elem);
  22. <a href="?page=p1">Ссылка1</a> <a href="?page=p2">Ссылка2</a> <?php switch ($_GET['page']) { case 'p1': {require('page1.php'); break;} case 'p2': {require('page2.php'); break;} } ?>
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy