- Файл
- История файлов
- Использование файла
- Глобальное использование файлов
Transmission_line_animation3.gif (300 × 60 пикселей, размер файла: 138 КБ, MIME - тип: изображение / GIF , петельный, 100 кадров, 5,0 с)
Резюме
ОписаниеЛиния передачи animation3.gif | Английский: волна, бегущая вправо по линии передачи без потерь. Черные точки представляют электроны, а стрелки показывают электрическое поле. |
Дата | |
Источник | Наша работа |
Автор | Sbyrnes321 |
Лицензирование
Я, владелец авторских прав на это произведение, публикую его под следующей лицензией:
Этот файл доступен по лицензии Creative Commons CC0 1.0 Universal Public Domain Dedication . | |
Лицо, связавшее произведение с этим документом, посвятило произведение общественному достоянию , отказавшись от всех своих прав на произведение во всем мире в соответствии с законом об авторском праве, включая все смежные и смежные права, в той степени, в которой это разрешено законом. Вы можете копировать, изменять, распространять и выполнять работу даже в коммерческих целях, не спрашивая разрешения. http://creativecommons.org/publicdomain/zero/1.0/deed.enCC0Creative Commons Zero, посвящение в общественное достояниеложныйложный |
Исходный код
"" " (C) Стивен Бирнс, 2014–2016 гг. Этот код выпущен под лицензией MIT http://opensource.org/licenses/MITЭтот код работает на Python 2.7 или 3.3. Для этого требуется установка imagemagick; вот как он собирает изображения в анимированные GIF. "" "из __future__ импортного подразделенияимпортировать pygame как pg из numpy import cos , pi , sin , linspace подпроцесс импорта , os directory_now = os . путь . dirname ( os . path . realpath ( __file__ ))frames_in_anim = 100 animation_loop_seconds = 5 # время в секундах для анимации до одного циклаbgcolor = ( 255 , 255 , 255 ) # фон белый ecolor = ( 0 , 0 , 0 ) # электроны черные wire_color = ( 200 , 200 , 200 ) # цвет провода светло-серый arrow_color = ( 140 , 0 , 0 )# pygame рисует пиксель-арт, а не сглаживает. Поэтому я рисую его # больше, а затем плавно уменьшаю img_height = 180 img_width = 900 final_height = 60 final_width = 300# ~ 23 мегапикселя для анимированных гифок из Википедии assert final_height * final_width * frames_in_anim < 22e6# толщина линии передачи и координата Y вершины каждого провода tl_thickness = 27 tl_top_y = 40 tl_bot_y = img_height - tl_top_y - tl_thickness + 2длина волны = 1,1 * img_widthe_radius = 4# размеры треугольной стрелки (это для самых длинных стрелок; # уменьшено, если стрелка слишком мала) arrowhead_base = 9 arrowhead_height = 15 # ширина линии стрелки arrow_width = 6# количество электронов, распределенных по линии передачи (верхний плюс нижний) num_electrons = 100 # max_e_displacement определяется здесь как кратное общей длине пути электронов # (примерно в два раза больше ширины изображения, потому что мы добавляем верх + низ ) max_e_displacement = 1 / 60num_arrows = 20 max_arrow_halflength = 22Защиту tup_round ( тупо ): «» «вокруг каждый элемента кортежа до ближайшего целого числа» «» обратного кортежа ( INT ( круглый ( х )) для й в тупе )def draw_arrow ( surf , x , tail_y , head_y ): "" " нарисуйте вертикальную стрелку. Координаты не обязательно должны быть целыми числами " "" # вычислить размеры треугольника; он масштабируется вниз для коротких стрел , если абс ( head_y - tail_y ) > = 1,5 * arrowhead_height : ч = arrowhead_height б = arrowhead_base еще : ч = абс ( head_y - tail_y ) / 1,5 б = arrowhead_base * ч / arrowhead_height if tail_y < head_y : # треугольник со стрелкой вниз = [ tup_round (( x , head_y )), tup_round (( x - b , head_y - h )), tup_round (( x + b , head_y - h ))] треугольник_middle_y = head_y - h / 2 else : # треугольник со стрелкой вверх = [ tup_round (( x , head_y )), tup_round (( x - b , head_y + h )), tup_round (( x + b , head_y + h ))] треугольник_middle_y = head_y + ч / 2 стр . рисовать . line ( surf , arrow_color , tup_round (( x , tail_y )), tup_round (( x , треугольник_middle_y )), arrow_width ) стр . рисовать . многоугольник ( прибой , цвет стрелки , треугольник , 0 )def e_path ( param , phase_top_left ): "" " когда param переходит от 0 до 1, это возвращает {'pos': (x, y), 'phase': phi}, где (x, y) - координаты соответствующих точка на пути электронной точки, а phi - это фаза электрона в этой точке пути. phase_top_left - фаза левой стороны верхнего провода. "" " # d - вертикальное смещение между электронами и проводами d = tl_thickness - e_radius - 2 # pad - это расстояние, на которое линия передачи должна выходить за границы изображения # (поскольку эти электроны могут немного входить в изображение) pad = 36 path_length = 2 * ( img_width + 2 * pad ) howfar = param * длина пути # перемещаемся вправо через верхнюю линию передачи if howfar <= path_length / 2 : x = howfar - pad y = tl_top_y + d phase = phase_top_left + 2 * pi * x / wavelength return { 'pos' :( x , y ), 'phase ' : phase } # ... затем переместитесь влево по нижней линии передачи x = path_length - howfar - pad y = tl_bot_y + tl_thickness - d phase = phase_top_left + 2 * pi * x / wavelength return { ' pos ' :( x , y ), 'phase' : phase }def main (): # Создайте и сохраните рисунок для каждого кадра filename_list = [ os . путь . join ( directory_now , 'temp' + str ( n ) + '.png' ) для n в диапазоне ( frames_in_anim )] для кадра в диапазоне ( frames_in_anim ): phase_top_left = - 2 * pi * frame / frames_in_anim #initialize surface surf = pg . Поверхность (( img_width , img_height )) surf . заливка ( bgcolor ); # нарисовать линию передачи стр . рисовать . rect ( surf , wire_color , [ 0 , tl_top_y , img_width , tl_thickness ]) стр . рисовать . rect ( surf , wire_color , [ 0 , tl_bot_y , img_width , tl_thickness ]) # рисовать электроны. Помните, «пары» является абстрактными координатами , который идет # с 0 до 1 , как положение электрона переходит прямо через верхний провод #then слева через нижний провод equilibrium_params = LINSPACE ( 0 , 1 , Num = num_electrons ) фазы = [ e_path ( , phase_top_left ) [ 'фаза' ] для через в equilibrium_params ] now_params = [ equilibrium_params [ я ] + грех ( фаз [ я ]) * max_e_displacement для I в диапазоне ( num_electrons )] Coords = [ e_path ( , phase_top_left ) [ ' поз ] для в now_params ] для коорда в координатах : стр . рисовать . круг ( серфинг , Ecolor , tup_round ( коорд ), e_radius ) # рисовать стрелки arrow_params = linspace ( 0 , 0.5 , num = num_arrows ) для i в диапазоне ( len ( arrow_params )): a = arrow_params [ i ] arrow_x = e_path ( a , phase_top_left ) [ 'pos' ] [ 0 ] arrow_phase = e_path ( a , phase_top_left ) [ 'phase' ] head_y = img_height / 2 + max_arrow_halflength * cos ( arrow_phase ) tail_y = img_height / 2 - max_arrow_halflength * cos ( arrow_phase ) draw_arrow ( surf , arrow_x , tail_y , head_y ) # уменьшить поверхность до окончательного размера и сохранить ее shrunk_surface = pg . преобразовать . smoothscale ( surf , ( final_width , final_height )) стр . изображение . сохранить ( shrunk_surface , filename_list [ frame ]) seconds_per_frame = animation_loop_seconds / frames_in_anim frame_delay = str ( int ( seconds_per_frame * 100 )) # Используйте команду "convert" (часть ImageMagick) для создания анимации command_list = [ 'convert' , '-delay' , frame_delay , '-loop' , '0' ] + список_файлов + подпроцесс [ 'anim.gif' ] . call ( command_list , cwd = directory_now ) # Ранее мы сохраняли файл изображения для каждого кадра анимации. Теперь, # когда анимация собрана, мы можем (при желании) удалить эти файлы, если True : for filename в filename_list : os . удалить ( имя файла ) main ()
Элементы, изображенные в этом файле
изображает
creator<\/a>"}},"text\/plain":{"en":{"":"creator"}}},"{\"value\":{\"entity-type\":\"property\",\"numeric-id\":4174,\"id\":\"P4174\"},\"type\":\"wikibase-entityid\"}":{"text\/html":{"en":{"":"Wikimedia username<\/a>"}},"text\/plain":{"en":{"":"Wikimedia username"}}},"{\"value\":\"Sbyrnes321\",\"type\":\"string\"}":{"text\/html":{"en":{"P4174":"Sbyrnes321<\/a>","P2093":"Sbyrnes321"}},"text\/plain":{"en":{"P4174":"Sbyrnes321","P2093":"Sbyrnes321"}}},"{\"value\":{\"entity-type\":\"property\",\"numeric-id\":2093,\"id\":\"P2093\"},\"type\":\"wikibase-entityid\"}":{"text\/html":{"en":{"":"author name string<\/a>"}},"text\/plain":{"en":{"":"author name string"}}},"{\"value\":{\"entity-type\":\"property\",\"numeric-id\":2699,\"id\":\"P2699\"},\"type\":\"wikibase-entityid\"}":{"text\/html":{"en":{"":"URL<\/a>"}},"text\/plain":{"en":{"":"URL"}}},"{\"value\":\"https:\\\/\\\/commons.wikimedia.org\\\/wiki\\\/user:Sbyrnes321\",\"type\":\"string\"}":{"text\/html":{"en":{"P2699":"https:\/\/commons.wikimedia.org\/wiki\/user:Sbyrnes321<\/a>"}},"text\/plain":{"en":{"P2699":"https:\/\/commons.wikimedia.org\/wiki\/user:Sbyrnes321"}}}}" class="wbmi-entityview-statementsGroup wbmi-entityview-statementsGroup-P170 oo-ui-layout oo-ui-panelLayout oo-ui-panelLayout-framed">
создатель
некоторая ценность
Имя пользователя в Викимедиа : Sbyrnes321
строка имени автора : Sbyrnes321
URL : https://commons.wikimedia.org/wiki/user:Sbyrnes321
copyright status<\/a>"}},"text\/plain":{"en":{"":"copyright status"}}},"{\"value\":{\"entity-type\":\"item\",\"numeric-id\":88088423,\"id\":\"Q88088423\"},\"type\":\"wikibase-entityid\"}":{"text\/html":{"en":{"P6216":"copyrighted, dedicated to the public domain by copyright holder<\/a>"}},"text\/plain":{"en":{"P6216":"copyrighted, dedicated to the public domain by copyright holder"}}}}" class="wbmi-entityview-statementsGroup wbmi-entityview-statementsGroup-P6216 oo-ui-layout oo-ui-panelLayout oo-ui-panelLayout-framed">
статус авторского права
защищен авторским правом, посвящен общественному достоянию правообладателем
copyright license<\/a>"}},"text\/plain":{"en":{"":"copyright license"}}},"{\"value\":{\"entity-type\":\"item\",\"numeric-id\":6938433,\"id\":\"Q6938433\"},\"type\":\"wikibase-entityid\"}":{"text\/html":{"en":{"P275":"CC0<\/a>"}},"text\/plain":{"en":{"P275":"CC0"}}}}" class="wbmi-entityview-statementsGroup wbmi-entityview-statementsGroup-P275 oo-ui-layout oo-ui-panelLayout oo-ui-panelLayout-framed">
лицензия на авторское право
CC0
source of file<\/a>"}},"text\/plain":{"en":{"":"source of file"}}},"{\"value\":{\"entity-type\":\"item\",\"numeric-id\":66458942,\"id\":\"Q66458942\"},\"type\":\"wikibase-entityid\"}":{"text\/html":{"en":{"P7482":"original creation by uploader<\/a>"}},"text\/plain":{"en":{"P7482":"original creation by uploader"}}}}" class="wbmi-entityview-statementsGroup wbmi-entityview-statementsGroup-P7482 oo-ui-layout oo-ui-panelLayout oo-ui-panelLayout-framed">
источник файла
оригинальное творение пользователя, загрузившего
inception<\/a>"}},"text\/plain":{"en":{"":"inception"}}},"{\"value\":{\"time\":\"+2014-11-09T00:00:00Z\",\"timezone\":0,\"before\":0,\"after\":0,\"precision\":11,\"calendarmodel\":\"http:\\\/\\\/www.wikidata.org\\\/entity\\\/Q1985727\"},\"type\":\"time\"}":{"text\/html":{"en":{"P571":"9 November 2014"}},"text\/plain":{"en":{"P571":"9 November 2014"}}}}" class="wbmi-entityview-statementsGroup wbmi-entityview-statementsGroup-P571 oo-ui-layout oo-ui-panelLayout oo-ui-panelLayout-framed">
зарождение
9 ноября 2014 г.
История файлов
Щелкните дату / время, чтобы просмотреть файл в том виде, в котором он был в то время.
Дата / время | Эскиз | Габаритные размеры | Пользователь | Комментарий | |
---|---|---|---|---|---|
Текущий | 01:53, 29 май 2016 | 300 × 60 (138 КБ) | Sbyrnes321 | не меняйте цвет стрелки, для простоты изображения | |
00:39, 10 ноя 2014 | 300 × 60 (238 КБ) | Sbyrnes321 | Страница, созданная пользователем с помощью UploadWizard |
Использование файла
Следующие страницы английской Википедии используют этот файл (страницы других проектов не указаны):
- Законы цепи Кирхгофа
- Производительность и моделирование передачи переменного тока
- Уравнения телеграфа
- Линия передачи
- Обсуждение: Линия передачи
- Пользователь: Законы Понора / Кирхгофа
- Пользователь: Sbyrnes321
Глобальное использование файлов
Следующие другие вики используют этот файл:
- Использование на es.wikipedia.org
- Ecuaciones del telegrafista
- Использование на tr.wikipedia.org
- İletim hattı