- Файл
- История файлов
- Использование файла
- Глобальное использование файлов
Transmission_line_animation_open_short2.gif (300 × 110 пикселов, размер файла: 105 КБ, MIME - тип: изображение / GIF , петельный, 50 кадров, 2,5 с)
![]() |
Резюме
ОписаниеЛиния передачи анимации открыть short2.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. "" "# Используйте деление в стиле Python 3: a / b - действительное деление, a // b - целочисленное деление от __future__ import division подпроцесс импорта , os directory_now = os . путь . dirname ( os . path . realpath ( __file__ ))импортировать pygame как pg из numpy import pi , linspace , cos , sinframes_in_anim = 50 animation_loop_seconds = 2.5 # время в секундах для цикла анимации за один циклbgcolor = ( 255 , 255 , 255 ) # фон белый ecolor = ( 0 , 0 , 0 ) # электроны черные wire_color = ( 200 , 200 , 200 ) # цвет провода светло-серый split_line_color = ( 0 , 0 , 0 ) # линия по центру черная arrow_color = ( 140 , 0 , 0 ) # стрелки красные# pygame рисует пиксель-арт, а не сглаживает. Поэтому я рисую его # больше, а затем плавно уменьшаю.img_height = 330 img_width = 900final_height = 110 final_width = 300# ~ 23 мегапикселя для анимированных гифок из Википедии assert final_height * final_width * frames_in_anim < 22e6# Линия передачи длина провода и толщины, а у-координата верхней части # каждый провод tl_length = INT ( img_width * . 9 ) tl_thickness = 27 tl_open_top_y = 30 tl_open_bot_y = tl_open_top_y + 69 tl_short_top_y = 204 tl_short_bot_y = tl_short_top_y + 69tl_open_center_y = int (( tl_open_top_y + tl_open_bot_y + tl_thickness ) / 2 ) tl_short_center_y = int (( tl_short_top_y + tl_short_bot_y + tl_thickness ) / 2 )длина волны = 1,1 * tl_lengthe_radius = 4# размеры треугольной стрелки (это для самых длинных стрелок; # уменьшено, если стрелка слишком мала) arrowhead_base = 9 arrowhead_height = 15 # ширина линии стрелки arrow_width = 6# количество электронов, распределенных по линии передачи (верхний плюс нижний) num_electrons = 100 # max_e_displacement определяется здесь как кратное общей длине пути электронов # (примерно в два раза больше ширины изображения, потому что мы добавляем верх + низ ) max_e_displacement = 1 / 40num_arrows = 20 max_arrow_halflength = 18Защиту 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_open ( param , time ): "" " " param "- это абстрактная координата, которая изменяется от 0 до 1, когда положение электрона идет вправо через верхний провод, а затем влево через нижний провод. " time "изменяется от 0 до 2pi за ход анимации. Это возвращает словарь: "pos" - это (x, y), координаты соответствующей точки на пути электронной точки; "displacement" - это смещение электрона в этой точке относительно его положения равновесия. (от -1 до -1); а 'charge' - это чистый заряд на данный момент (от -1 до +1) Это для линии разомкнутой цепи. "" " # d - вертикальное смещение между электронами и проводами d = e_radius + 2 # pad - это расстояние, на которое линия передачи выходит за границы изображения # (поскольку эти электроны могут немного входить в изображение) pad = 36 path_length = 2 * ( tl_length + pad ) howfar = param * path_length # идите вправо по верхней линии передачи if howfar < tl_length + pad : x = howfar - pad y = tl_open_top_y + tl_thickness - d displacement = - sin ( 2 * pi * ( tl_length - x ) / wavelength ) * cos ( time ) charge = cos ( 2 * pi * ( tl_length - x ) / длина волны ) * cos ( время ) return { 'pos' :( x , y ), 'displacement' : displacement , 'charge' : charge } # идти влево по нижней линии передачи x = path_length - howfar - pad y = tl_open_bot_y + d displacement = - sin ( 2 * pi * ( tl_length - x ) / wavelength ) * cos ( time ) charge = - cos ( 2 * pi * ( tl_length - x ) / длина волны ) * cos ( время ) return { 'pos' :( x , y ), 'displacement' : displacement , 'charge' : charge }def e_path_short ( param , time ): "" "То же, что и e_path_open (...) выше, но для линии короткого замыкания." "" # d - вертикальное смещение между электронами и проводами d = e_radius + 2 # pad - это расстояние, на которое линия передачи выходит за границы изображения # (поскольку эти электроны могут немного входить в изображение) pad = 36 path_length = ( 2 * ( tl_length + pad ) + 4 * d + ( tl_short_bot_y - tl_short_top_y - tl_thickness ) ) howfar = param * path_length # сначала идите вправо по верхнему проводу, если howfar < tl_length + pad : x = howfar - pad y = tl_short_top_y + tl_thickness - d displacement = cos ( 2 * pi * ( tl_length - x ) / wavelength ) * cos ( время ) charge = sin ( 2 * pi * ( tl_length - x ) / длина волны ) * cos ( время ) return { 'pos' :( x , y ), 'displacement' : displacement , 'charge' : charge } # в конце идите влево по нижнему проводу if ( path_length - howfar ) < tl_length + pad : x = path_length - howfar - pad y = tl_short_bot_y + d displacement = cos ( 2 * pi * ( tl_length - x ) / wavelength ) * cos ( время ) charge = - sin ( 2 * pi * ( tl_length - x ) / длина волны ) * cos ( время ) return { 'pos' :( x , y ), 'displacement' : displacement , 'charge' : charge } # посередине ... заряд = 0 смещение = cos ( время ) # верхняя часть короткого ... if tl_length + pad < howfar < tl_length + pad + d : x = howfar - pad y = tl_short_top_y + tl_thickness - d # нижняя часть короткого ... elif tl_length + pad < ( path_length - howfar ) < tl_length + pad + d : x = path_length - howfar - pad y = tl_short_bot_y + d # вертикальная часть короткого ... else : x = tl_length + d y = ( tl_short_top_y + tl_thickness - d ) + (( howfar - pad ) - ( tl_length + d )) return { 'pos' : ( x , y ), 'displacement' : displacement , 'charge' : заряд }def e_path ( param , time , which ): вернуть e_path_open ( param , time ) if which == 'open' else e_path_short ( param , time )def main (): # Создайте и сохраните рисунок для каждого кадра filename_list = [ os . путь . join ( directory_now , 'temp' + str ( n ) + '.png' ) для n в диапазоне ( frames_in_anim )] для кадра в диапазоне ( frames_in_anim ): time = 2 * pi * frame / frames_in_anim #initialize surface surf = pg . Поверхность (( img_width , img_height )) surf . заливка ( bgcolor ); # нарисовать линию передачи стр . рисовать . rect ( surf , wire_color , [ 0 , tl_open_top_y , tl_length , tl_thickness ]) стр . рисовать . rect ( surf , wire_color , [ 0 , tl_open_bot_y , tl_length , tl_thickness ]) стр . рисовать . rect ( surf , wire_color , [ 0 , tl_short_top_y , tl_length , tl_thickness ]) стр . рисовать . rect ( surf , wire_color , [ 0 , tl_short_bot_y , tl_length , tl_thickness ]) стр . рисовать . rect ( surf , wire_color , [ tl_length , tl_short_top_y , tl_thickness , tl_short_bot_y - tl_short_top_y + tl_thickness ]) # проведите линию по середине стр . рисовать . линия ( серфинг , split_line_color , ( 0 , img_height // 2 ), ( img_width , img_height // 2 ), 12 ) # рисовать электроны. Помните, что "param" - это абстрактная координата, которая изменяется # от 0 до 1, когда положение электрона идет вправо через верхний провод # затем слева через нижний провод equilibrium_params = linspace ( 0 , 1 , num = num_electrons ), для которого в [ ' open ' , ' short ' ]: для eq_param в equilibrium_params : temp = e_path ( eq_param , time , which ) param_now = eq_param + max_e_displacement * temp [ ' displacement ' ] xy_now = e_path ( param_now , time , which ) [ ' pos ' ] стр . рисовать . круг ( прибой , ecolor , tup_round ( xy_now ), e_radius ) #draw стрелки arrow_params = linspace ( 0 , 0.49 , num = num_arrows ) для которых in [ 'open' , 'short' ]: center_y = tl_open_center_y if which == 'open' else tl_short_center_y для i в диапазоне ( len ( arrow_params )) : a = arrow_params [ i ] arrow_x = e_path ( a , time , which ) [ 'pos' ] [ 0 ] charge = e_path ( a , time , which ) [ 'charge' ] head_y = center_y + max_arrow_halflength * charge tail_y = center_y - max_arrow_halflength * charge draw_arrow ( прибой , 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\":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"}}},"{\"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"}}}}" class="wbmi-entityview-statementsGroup wbmi-entityview-statementsGroup-P170 oo-ui-layout oo-ui-panelLayout oo-ui-panelLayout-framed">
создатель
некоторая ценность
Имя пользователя в Викимедиа : Sbyrnes321
URL : https://commons.wikimedia.org/wiki/user:Sbyrnes321
строка имени автора : 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
inception<\/a>"}},"text\/plain":{"en":{"":"inception"}}},"{\"value\":{\"time\":\"+2014-11-11T00:00:00Z\",\"timezone\":0,\"before\":0,\"after\":0,\"precision\":11,\"calendarmodel\":\"http:\\\/\\\/www.wikidata.org\\\/entity\\\/Q1985727\"},\"type\":\"time\"}":{"text\/html":{"en":{"P571":"11 November 2014"}},"text\/plain":{"en":{"P571":"11 November 2014"}}}}" class="wbmi-entityview-statementsGroup wbmi-entityview-statementsGroup-P571 oo-ui-layout oo-ui-panelLayout oo-ui-panelLayout-framed">
зарождение
11 ноября 2014 г.
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">
источник файла
оригинальное творение пользователя, загрузившего
История файлов
Щелкните дату / время, чтобы просмотреть файл в том виде, в котором он был в то время.
Дата / время | Эскиз | Габаритные размеры | Пользователь | Комментарий | |
---|---|---|---|---|---|
Текущий | 02:10, 29 май 2016 | ![]() | 300 × 110 (105 КБ) | Sbyrnes321 | все стрелки теперь красные, чтобы уменьшить сложность изображения |
04:12, 12 ноя 2014 | ![]() | 300 × 110 (155 КБ) | Sbyrnes321 | Страница, созданная пользователем с помощью UploadWizard |
Использование файла
Следующие страницы английской Википедии используют этот файл (страницы других проектов не указаны):
- Трансформатор четвертьволнового импеданса
- Отражения сигналов на проводящих линиях
- Линия передачи
- Пользователь: Sbyrnes321
Глобальное использование файлов
Следующие другие вики используют этот файл:
- Использование на id.wikipedia.org
- Трансмиси (телекомуникаси)
- Использование на it.wikipedia.org
- Trasformatore di impedenza a un Quarto d'onda
- Использование на pt.wikipedia.org
- Transformador de impedância de Quarto de Onda