티스토리 뷰
엘리베이터 조명천장 홀계산하는 로직 개발
#031 홀간격계산
def calculate_hole_positions_separated_lc031(LCD):
center = LCD // 2 # 중심 지점
central_start = center - 185 # 중심 구간 시작
central_end = center + 185 # 중심 구간 끝
left_positions = []
right_positions = []
# 중심으로부터 왼쪽 계산
left_current = central_start
while left_current > 0:
left_positions.insert(0, left_current)
left_current -= 220
# 중심으로부터 오른쪽 계산
right_current = central_end
while right_current < LCD:
right_positions.append(right_current)
right_current += 220
# 결과 리스트 합치기
positions = left_positions + right_positions
return positions
위의 함수를 이용해서
#035 홀간격계산
def calculate_hole_positions_separated_lc035(LCD):
함수를 제작할 것이다.
규칙은 center 기준 -15, +15 이렇게 시작해서 양쪽으로 홀이 형성되는 것이다.
첫번째 홀이 x1이라고 하면,
x1은 54부터 시작이다.
예를 들면, LCD값이 1450이라면
center= 1450/2 값이고,
x1은 54, x의 마지막홀은 LCD-54에 해당된다.
그러면, 4개의 홀은 이미 확보된 것이다. 54, center-15, center+15, LCD-54
이제 나머지 홀의 위치는 나머지 영역, 즉 center기준 좌측에 해당되는 영역은
1450/2의 값인 725-54-15 = 656의 숫자를 200에서 250의 간격으로 그 영역을 분할하는데, 보통 3분할 또는 4분할이 나올 것이다.
그러면 예시를 들은 것은 1450 LCD는
54, 218, 220, 218, 30, 218, 220, 218,54
위와 같은 결과가 나와야 한다.
218, 220은 소수점이 나오지 않게 해야하기때문에 이렇게 만든 것이다. 결국 656이라는 숫자를 3분할 할때 218.6 이렇게 소수점이 나오지 않고, 이런 경우는 218,220,218 이렇게 해서 소수점이 나오지 않게 홀의 간격을 만드는 것이 중요한 알고리즘이다.
주어진 규칙에 따라 calculate_hole_positions_separated_lc035 함수를 작성하겠습니다. 이 함수는 LCD의 크기에 따라 중심점을 기준으로 왼쪽과 오른쪽에 홀을 배치합니다. 첫 번째 홀은 54부터 시작하고, 나머지 홀은 중심점 기준으로 각각 -15, +15에 배치됩니다. 그 후, 남은 영역을 균등하게 3분할 또는 4분할하여 추가 홀의 위치를 결정합니다.
주어진 LCD 길이에 따라 홀의 위치를 계산하는 알고리즘은 다음과 같습니다:
LCD의 중심을 찾습니다.
첫 번째 홀의 위치는 54, 마지막 홀의 위치는 LCD-54입니다.
중심점을 기준으로 -15, +15에 홀을 배치합니다.
남은 영역을 3분할 또는 4분할하여 홀의 위치를 계산합니다.
이 규칙에 따라 함수를 작성하겠습니다:
def calculate_hole_positions_separated_lc035(LCD):
center = LCD // 2
left_remaining = center - 54 - 15
right_remaining = center - 54 - 15
# 기본 홀 위치 설정
positions = [54, center - 15, center + 15, LCD - 54]
# 남은 영역 계산을 위한 함수
def calculate_remaining_positions(remaining_length, side='left'):
num_sections = 3 if remaining_length % 4 > remaining_length % 3 else 4
section_length = remaining_length // num_sections
adjustment = remaining_length % num_sections
positions = []
current_position = 54 if side == 'left' else LCD - 54
for _ in range(num_sections):
if adjustment > 0:
positions.append(current_position + section_length + 1)
current_position += section_length + 1
adjustment -= 1
else:
positions.append(current_position + section_length)
current_position += section_length
return positions if side == 'left' else positions[::-1]
# 왼쪽과 오른쪽 영역 계산
left_positions = calculate_remaining_positions(left_remaining, 'left')
right_positions = calculate_remaining_positions(right_remaining, 'right')
return left_positions + positions + right_positions
# 예시로 LCD 값이 1450일 때의 결과
positions = calculate_hole_positions_separated_lc035(1450)
print(positions)
위의 코드로 실행하니 오류가 있어서 다시 코드를 수정했다.
def calculate_hole_positions_separated_lc035(LCD):
# 중심 지점 계산
center = LCD // 2
# 중심으로부터의 고정 홀 위치
fixed_holes = [54, center - 15, center + 15, LCD - 54]
# 중심 왼쪽 남은 거리 계산
remaining_left = center - 15 - 54
# 남은 거리를 3분할 또는 4분할하는 함수
def divide_remaining_distance(remaining_distance):
# 간격이 200에서 250 사이가 되도록 분할 수 결정
for div in range(3, 5):
intervals = [remaining_distance // div] * (div - 1)
intervals.append(remaining_distance - sum(intervals))
if all(200 <= x <= 250 for x in intervals):
return intervals
return []
# 왼쪽 간격 계산
left_intervals = divide_remaining_distance(remaining_left)
# 홀 위치 계산
hole_positions = []
current_position = 54
for interval in left_intervals:
current_position += interval
if current_position not in fixed_holes: # 중복 제거
hole_positions.append(current_position)
# 대칭적인 오른쪽 홀 위치 계산
for interval in reversed(left_intervals):
current_position = LCD - 54 - interval
if current_position not in fixed_holes: # 중복 제거
hole_positions.append(current_position)
# 중심 홀과 양쪽 홀 위치 결합 및 정렬
return sorted(fixed_holes + hole_positions)
이 함수는 주어진 LCD 크기에 대해 지정된 규칙에 따라 홀의 위치를 계산하고, 결과적으로 홀 간격을 분할합니다. 위 예시 코드는 LCD 값이 1450일 때 홀의 위치를 계산하고 출력합니다.
'IT tech Coding > python' 카테고리의 다른 글
[python] 엘리베이터 판넬 종보강 제작을 위한 알고리즘 연구 feat GPT4 (0) | 2024.04.08 |
---|---|
[python] 파이썬 3항 연산자 간단설명 (0) | 2024.04.02 |
파이썬 컴파일시 오류 UnicodeEncodeError: 'locale' codec can't encode character '\ub144' in position 2: encoding error [18480] Failed to execute script 'mirae_ceiling_ver01' due to unhandled exception! (0) | 2024.03.06 |
파이썬 묶음으로 함수호출하는 법 x1, y1을 한쌍으로 호출? (0) | 2024.02.26 |
파이썬 전역변수 선언하는 시원한 방법 (0) | 2024.02.26 |
- Total
- Today
- Yesterday
- 티스토리챌린지
- 캐드자동작도
- General error: 2031
- 코딩튜토리얼
- 뫄프로그래밍
- 스크립트작성기초
- ajax오류메시지
- 엑셀입력보호
- 코딩효율성
- 오토핫키가이드
- 구글드라이브API
- 파이썬코드줄바꿈방법
- chatGPT3.5파이썬버전
- Bootstrap 5
- 1. #웹개발 2. #로트번호 3. #성적서보기 4. #ajax 5. #jquery 6. #php 7. #프론트엔드 8. #백엔드 9. #부트스트랩 10. #웹기능구현
- 테크에능한여성
- sql문장 날짜계산
- #InstallForge
- json파일편하게보는법
- 엑셀보호
- 도면자동생성
- 엑셀셀보호
- #프로그램설치
- 효율적코딩방법
- isset을 적용해야 하는 이유
- 오블완
- #파이썬패키징
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- 프로그래머생활
- json파일형태보기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |