Файл:GrahamScanDemo.gif

GrahamScanDemo.gif (344 × 353 пикселей, размер файла: 217 КБ, тип MIME: image/gif , зацикленный, 51 кадр, 41 с)

Краткое содержание

ОписаниеGrahamScanDemo.gif
Русский: Демонстрация сканирования Грэма, автоматически сгенерированная программой Python. Красные линии соединяют точки в стеке. Синяя линия соединяет наблюдаемую точку с вершиной стека.
Дата
ИсточникСобственная работа
АвторШию Джи

Код Python 3

''' Convex Hull Demo (SVG) для Graham's Scan. Сначала используйте этот код для генерации кадров SVG. Затем преобразуйте в растровые изображения и конвертируйте в GIF. '''# размер диапазона N  =  300 поле  =  50def  saveToSVG ( nFrames ,  points ,  firmed ,  trying ):  f  =  open ( 'demo_' + str ( nFrames ) + '.svg' ,  'w' )  f.write ( "<svg xmlns= \" http : //www.w3.org/2000/svg \" version= \" 1.1 \" > \ n " ) для p в точках : f.write ( "<circle cx= \ " " + str ( p [ 0 ] + margin ) + " \" cy = \" " + str ( N - p [ 1 ] + margin ) + " \" r= \" 5 \" fill= \" white \" stroke= \" black \" /> \n " ) для i в диапазоне ( len ( firmed ) - 1 ): f .запись ( "<строка x1= \" " + str ( уст. [ i ][ 0 ] + отступ ) + " \" y1= \" " + str ( N - уст. [ i ][ 1 ] + отступ ) + " \" x2= \" " + str ( уст. [ i + 1 ][ 0 ] + отступ ) + " \" y2= \" " + str ( N - уст. [ i + 1 ][ 1 ] + отступ )                         +  " \" stroke= \" red \" stroke-width= \" 5 \" /> \n " )  for  i  in  range ( len ( trying ) - 1 ):  f . write ( "<line x1= \" "  + str ( trying [ i ][ 0 ] + margin ) +  " \" y1= \" " +  str ( N ​​- trying [ i ][ 1 ] + margin )  + " \" x2= \" "  +  str ( trying [ i + 1 ][ 0 ] + margin )  +  " \" y2= \" "  +  str ( N ​​- trying [ i + 1 ][ 1 ] + margin )  +  " \" stroke= \" blue \" stroke-width= \" 5 \" /> \n " )  f . write ( "</svg> \n " )  f . close ()def  generatePoints ( n ):  импорт  случайных чисел  как  r  r . seed ( 100 )  res  =  []  для  i  в  диапазоне ( n ):  pt  =  [ r . randint ( 0 , N )  для  _  в  [ 0 ,  1 ]]  если  [ pt ]  не  в  res :  res  +=  [ pt ]  вернуть  resdef  norm ( x ,  y ):  return  ( x * x + y * y ) ** .5def  dotProductNormed ( x1 ,  y1 ,  x2 ,  y2 ):  return  ( x1 * x2 + y1 * y2 ) / norm ( x1 ,  y1 ) / norm ( x2 ,  y2 )def  cross ( x1 ,  y1 ,  x2 ,  y2 ):  вернуть  x1 * y2  -  x2 * y1def  graham ( n ,  points ):  если  n < 3 :  return  nframe  =  0 ;  points . sort ( key  =  lambda  x :  x [ 1 ])  first  =  points [ 0 ]  rest  =  points [ 1 :]  rest . сортировка ( ключ  =  лямбда  x :  - dotProductNormed ( x [ 0 ] - баллы [ 0 ][ 0 ],  x [ 1 ] - баллы [ 0 ][ 1 ],  1 ,  0 ))  баллы  =  [ первый ]  +  остаток  стек  =  [ баллы [ 0 ],  баллы [ 1 ]]  saveToSVG ​​( nframe ,  баллы ,  стек ,  [ стек [ - 1 ],  баллы [ 2 ]])  nframe  +=  1  i = 2  пока  i < n :  x0 ,  y0  =  стек [ - 2 ][ 0 ],  стек [ - 2 ][ 1 ]  x1 ,  y1  =  стек [ - 1 ][ 0 ],  стек [ - 1 ][ 1 ]  x2 ,  y2  =  баллы [ i ][ 0 ],  баллы [ i ][ 1 ]  если  крест ( x1 - x0 ,  y1 - y0 ,  x2 - x0 ,  у2 - у0 )< 0 :  стек . pop ()  иначе :  стек  +=  [ points [ i ]]  i += 1  если  i < n :  saveToSVG ​​( nframe ,  points ,  stack ,  [ stack [ - 1 ],  points [ i ]])  иначе :  saveToSVG ​​( nframe ,  points ,  stack + [ points [ 0 ]],  [])  nframe  +=  1  вернуть  стек# тест 30 баллов временно n  =  30 баллов  =  generatePoints ( n ) graham ( n ,  pts )

Лицензирование

Я, владелец авторских прав на данную работу, настоящим публикую ее на условиях следующей лицензии:
w:ru:Creative Commons
атрибуция доля одинаково
Этот файл лицензирован в соответствии с лицензией Creative Commons Attribution-Share Alike 4.0 International.
Вы свободны:
  • делиться – копировать, распространять и передавать работу
  • ремиксовать – адаптировать произведение
При следующих условиях:
  • атрибуция – Вы должны указать соответствующее авторство, предоставить ссылку на лицензию и указать, были ли внесены изменения. Вы можете сделать это любым разумным способом, но не таким образом, который подразумевает, что лицензиар одобряет вас или ваше использование.
  • распространяйте на равных условиях – если вы делаете ремиксы, преобразуете или дополняете материал, вы должны распространять свои вклады по той же или совместимой лицензии, что и оригинал.
https://creativecommons.org/licenses/by-sa/4.0CC BY-SA 4.0Creative Commons Attribution-Share Alike 4.0истинныйистинный

Подписи

Добавьте однострочное объяснение того, что представляет собой этот файл.

Элементы, изображенные в этом файле

изображает

создатель

some value

Wikimedia username: Shiyu Ji
URL: https://commons.wikimedia.org/wiki/user:Shiyu_Ji
author name string: Shiyu Ji

copyright status

copyrighted

copyright license

Creative Commons Attribution-ShareAlike 4.0 International

source of file

original creation by uploader

inception

23 December 2016

История файла

Нажмите на дату/время, чтобы просмотреть файл в том виде, в котором он был в тот момент.

Дата/ВремяМиниатюраРазмерыПользовательКомментарий
текущий10:05, 23 декабря 2016 г.344 × 353 (217 КБ)Шию ДжиПользователь создал страницу с помощью UploadWizard

Следующие 3 страницы используют этот файл:

Глобальное использование файлов

Этот файл используют и другие вики:

  • Использование на ca.wikipedia.org
    • Метод Грэма
  • Использование на de.wikipedia.org
    • Конвексная рама
    • Грэхем Скан
  • Использование на el.wikipedia.org
    • Υπολογιστική γεωμετρία
  • Использование на es.wikipedia.org
    • Метод Грэма
    • Geometría computacional
  • Использование на ja.wikipedia.org
    • 凸包アルゴリズム
  • Использование на ko.wikipedia.org
    • Да, я люблю тебя
  • Использование на ro.wikipedia.org
    • Алгоритм Грэма
  • Использование на uk.wikipedia.org
    • Алгоритм Грехема
Retrieved from "https://en.wikipedia.org/wiki/File:GrahamScanDemo.gif"