이것은 "풀링 기능 긴장"에 대한 두 가지 도전 과제 중 두 번째입니다. 여기 조금 더 간단한 Part I이 있습니다.
하자 구동 m의 위치에서 기판에 손톱 (X 1 , Y 1 ) 행 (X의 M , Y, m ) . 고무 밴드를 첫 번째와 마지막에 묶고 다른 손톱 주위로 펴서 밴드가 모든 손톱을 순서대로 가로지 릅니다. 고무 밴드는 이제 2D 공간에서 부분 선형 매개 변수화 된 함수 (x (t), y (t)) 를 설명합니다.
이제 다른 n 손톱을 (x 1 , y 1 ) ~ (x n , y n ) 위치로 보드에 넣습니다 . 우리는 이제 원래 모두 제거하면 m에 못 제외 (고무의 단부가 묶여있다) 첫 번째와 마지막 하나는 새로운 손톱 주위 팽팽 누워 함수 선형 다른 절편을 수득 될 때까지 고무 밴드가 단축된다.
일례로서, 수행 m = 12 개 의 위치에서 최초의 손톱 (2, -1) (0, 0), (3/2, 4/3), (7/2, 1/3), (11/2를 16/3), (1, 16/3), (0, 1), (7, -2), (3, 4), (8, 1), (3, -1), (11, 0) 및 N = 10 의 위치에있어서 손톱 (1,1), (3,1), (4,4), (1,3), (2,2), (5, -1), (5, 0 ), (6, 2), (7, 1), (6, 0) . 다음 3 가지 플롯은 위에서 설명한 프로세스를 보여줍니다.
더 큰 버전 : 오른쪽 클릭-> 새 탭에서 열기
다음은 고무 밴드를 조이는 데 어려움이있는 경우의 조임 애니메이션입니다.
도전
두 개의 "손톱"목록이 주어지면 첫 번째 목록의 모든 못을 가로 지르는 모양에서 시작하는 두 번째 목록 주위에 팽팽한 고무 밴드를 그립니다.
프로그램이나 함수를 작성하고 STDIN, ARGV 또는 함수 인수를 통해 입력을받을 수 있습니다. 결과를 화면에 표시하거나 이미지를 파일로 저장할 수 있습니다.
결과가 래스터 화 된 경우 각면에서 300 픽셀 이상이어야합니다. 최종 고무 밴드와 손톱은 이미지의 가로 및 세로 범위의 75 % 이상을 커버해야합니다. x 와 y 의 길이 스케일은 같아야합니다. 두 번째 세트 (최소 3x3 픽셀 사용) 및 문자열 (최소 1 픽셀 너비)로 손톱을 표시해야합니다. 축을 포함하거나 포함하지 않을 수 있습니다.
색상을 선택할 수 있지만 배경과 손톱, 끈 (색상이 다를 수 있음)에 대해 각각 두 가지 이상의 구별 가능한 색상이 필요합니다.
두 번째 목록의 모든 손톱 은 고무 밴드의 초기 모양 에서 최소 10-5 단위 떨어져 있다고 가정 할 수 있으므로 부동 소수점 부정확성에 대해 걱정할 필요가 없습니다.
이것은 코드 골프이므로 가장 짧은 대답 (바이트)이 이깁니다.
더 많은 예
다음은 두 가지 예입니다.
{{1, 1}, {3, 3}, {2, 4}, {1, 3}, {4, 0}, {3, -1}, {2, 0}, {4, 2}}
{{2, 1}, {3, 2}, {1, 2}, {4, 1}}
{{1, 1}, {3, 1}, {3, 3}, {1, 3}, {1, 5}, {3, 5}, {-1, 3}, {-1, 0}, {3, 4}, {5, 1}, {5, -1}, {7, -1}, {3, 7}, {7, 5}}
{{0, 0}, {0, 2}, {0, 4}, {0, 6}, {2, 0}, {2, 2}, {2, 4}, {2, 6}, {4, 0}, {4, 2}, {4, 4}, {4, 6}, {6, 0}, {6, 2}, {6, 4}, {6, 6}}
그리고 여기에 남아있는 두 개의 초기 손톱의 중요성을 보여주는 예가 있습니다. 결과는해야 B 와 하지 :
{{0, 0}, {0, 1}, {-1, 1}, {-1, -1}, {1, -1}, {1, 0}}
{{-0.5, 0.5}}
이 예제를 제공 한 Ell에게 감사합니다.