ṀÐƤḊ_⁸«©0×⁹I¤÷⁸I¤,®²S½S
왼쪽의 y 값 목록과 오른쪽의 각 x 값 목록을 가져 오는 2 진 링크 (댓글에서 OP가 명시 적으로 허용 한대로)
온라인으로 사용해보십시오!
어떻게?
불이 켜진 (경사) 섹션의 비율은 수직 드롭 인 경우 불이 켜지는 비율과 동일합니다. 기울기 길이를 평가하기 위해 제곱이 발생하기 때문에 길을 따라 계산 된 높이는 음수 일 수 있습니다 (아래에서 조명 된 기울기의 길이는 음수를 음수로 나눈 값으로 계산 됨).
ṀÐƤḊ_⁸«©0×⁹I¤÷⁸I¤,®²S½S - Link:list, yValues; list, xValues
ÐƤ - for suffixes of the yValues: e.g. [ 3000, 3500, 1000, 5000, 2000, 3500, 0]
Ṁ - maximum [ 5000, 5000, 5000, 5000, 3500, 3500, 0]
Ḋ - dequeue [ 5000, 5000, 5000, 3500, 3500, 0]
⁸ - chain's left argument, yValues [ 3000, 3500, 1000, 5000, 2000, 3500, 0]
_ - subtract [ 2000, 1500, 4000,-1500, 1500,-3500, 0]
0 - literal zero
« - minimum (vectorises) [ 0, 0, 0,-1500, 0,-3500, 0]
© - copy to the register for later
¤ - nilad followed by link(s) as a nilad:
⁹ - chain's right argument, xValues e.g. [ 0, 500, 2500, 5000, 9000, 9000, 10200]
I - incremental differences [ 500, 2000, 2500, 4000, 0, 1200]
× - multiply (vectorises) [ 0, 0, 0,-6000000, 0,-4200000, 0]
¤ - nilad followed by link(s) as a nilad:
⁸ - chain's left argument, yValues [ 3000, 3500, 1000, 5000, 2000, 3500, 0]
I - incremental differences [ 500,-2500, 4000,-3000, 1500,-3500]
÷ - divide (vectorises) [ 0, 0, 0, 2000, 0, 1200, 0]
® - recall from the register [ 0, 0, 0,-1500, 0,-3500, 0]
, - pair (i.e. lit slope [runs, rises]) [[0, 0, 0, 2000, 0, 1200, 0], [0, 0, 0, -1500, 0, -3500, 0]]
² - square (vectorises) [[0, 0, 0, 4000000, 0, 1440000, 0], [0, 0, 0, 2250000, 0, 12250000, 0]]
S - sum (vectorises) [ 0, 0, 0, 6250000, 0, 13690000, 0]
½ - square root (vectorises) [0.0, 0.0, 0.0, 2500.0, 0.0, 3700.0, 0.0]
S - sum 6200.0
[x,y]
좌표 목록을 취하는 25 바이트 모나 딕 버전 :
ṀÐƤḊ_«0
Z©Ṫµ®FI×Ç÷I,DzS½S
이거 한번 해봐.
(x1, y1)
및(x2,y2)
. 그것이 "차단"되어있는 점(x3, y3)
. Y2 가정 <Y3 <= Y1은. 세그먼트에서의 길이가된다((y1 - y3)/(y1 - y2))*sqrt((x1 - x2)^2 + (y1 - y2)^2)
. 이것은 본질적이고 화학식 거리가 실제로 사용되는 부분의 비율을 곱한.