<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>아직도 꿈만 꿔?</title>
		<link>http://blog.jeidee.net/</link>
		<description>여전히 아무 것도 없다</description>
		<language>ko</language>
		<pubDate>Tue, 09 Feb 2010 13:15:44 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<image>
		<title>아직도 꿈만 꿔?</title>
		<url><![CDATA[http://cfs12.tistory.com/upload_control/download.blog?fhandle=YmxvZzQzNTY1QGZzMTIudGlzdG9yeS5jb206L2F0dGFjaC8wLzI0LmpwZw%3D%3D]]></url>
		<link>http://blog.jeidee.net/</link>
		<description>여전히 아무 것도 없다</description>
		</image>
		<item>
			<title>SQL Server 2005에서 SQL Server 2008로 업그레이드(Developer Edition)</title>
			<link>http://blog.jeidee.net/837</link>
			<description>다음과 같이 작업을 수행하였다.&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;# SQL Server Developer Edition을 2005에서 2008로 업그레이드&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
1. 설치시작 -&amp;gt; 재부팅 : 10시 32분 시작&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
2. 모든 서비스 중지&lt;/div&gt;
&lt;div&gt;
3. 업그레이드 선택 설치&lt;/div&gt;
&lt;div&gt;
4. 업그레이드 성공 : 11시 06분 완료&lt;/div&gt;
&lt;div&gt;
5. 서비스팩 설치 시작 : 11시 12분&lt;/div&gt;
&lt;div&gt;
6. 서비스팩 설치 완료 : 11시 23분&lt;/div&gt;
&lt;div&gt;
7. 버전 = 10.0.2531&lt;/div&gt;
&lt;div&gt;
8. SQL 2005 프로그램 제거 : 워크스테이션 구성요소&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;
소요시간은 1시간 가량 걸렸는데, 서버환경은 모두 다르므로 단순히 참고만 할 것!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;# 설치후 문제점&lt;/div&gt;
&lt;div&gt;1. SQL Server 2005 서비스팩 3가 설치되지 않은 SSMS에서는 접속되지 않는다.&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
# 사족&lt;/div&gt;
&lt;div&gt;
&amp;nbsp;&lt;b&gt;&lt;font class=&quot;Apple-style-span&quot; color=&quot;#E31600&quot;&gt;서비스를 중지하지 않을 경우 업그레이드 완료 시점에서 특정 서비스(잘 기억 안남)가 응답이 없다는 오류메시지를 출력하면서 실패한다.&amp;nbsp;&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
이럴 경우 2005, 2008 모두 제거하고 다시 설치해야 하는 우울한 상황이 발생하게 된다.&lt;/div&gt;
&lt;/div&gt;</description>
			<category>SQL Server</category>
			<author>Jeidee</author>
			<guid>http://blog.jeidee.net/837</guid>
			<comments>http://blog.jeidee.net/837#entry837comment</comments>
			<pubDate>Tue, 09 Feb 2010 12:36:18 +0900</pubDate>
		</item>
		<item>
			<title>SQL Server 2008 새로운 기능 정리</title>
			<link>http://blog.jeidee.net/836</link>
			<description>&lt;p&gt;참고한 문서 : &lt;a href=&quot;http://technet.microsoft.com/ko-kr/library/bb510411.aspx&quot;&gt;http://technet.microsoft.com/ko-kr/library/bb510411.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;관리와 운영측면에서 본 마이그레이션 필요성&lt;/h4&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;p&gt;미러링 환경이 구축되어 있을 경우 가용성 향상&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;백업용량을 축소시킬 필요가 있을 경우 써드파티 불필요&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;데이터 동기화가 필요하고 현재 성능 저하 및 데이터 신뢰성 확보에 문제가 있을 경우 마이그레이션 필요&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;관리해야할 데이터베이스 서버가 여러대이고 통합 관리하는데 불편함이 있다면 마이그레이션 후 중앙관리서버와 데이터수집기 운영으로 효과를 볼 수 있다.&lt;/p&gt;      &lt;p&gt;정책 기반 관리를 적용해 일관된 정책을 여러 서버에 쉽게 전파하고 운영할 수 있는 장점이 있다.&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;데이터의 암호화 기능을 다양하게 지원하여, 보안성을 향상 시킬 수 있다.&lt;/p&gt;      &lt;p&gt;개별 데이터 암호화 알고리즘 확장 지원 및 옵션 설정으로 엔진차원에서 암/복호화 수행하여 데이터파일 유출시에도 걱정을 덜어준다.&lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;개발 측면에서 향상된 기능&lt;/h4&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;p&gt;테이블/인덱스/인덱싱된 뷰의 데이터 압축 지원&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;분할된 테이블 및 인덱스에 대한 파티션 전환 성능 향상&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;공간 데이터 지원(geometry, geography 데이터 형식 추가)&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;날짜 데이터형식 추가되어 정밀도 향상&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;계층적 구조 지원으로 프로그래밍 편의성 향상&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;전체 텍스트 검색이 데이터베이스에 통합되어 이동, 백업/복원 시 관리 용이&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;T-SQL 프로그래밍 편이성 증가&lt;/p&gt;      &lt;ol&gt;       &lt;li&gt;         &lt;p&gt;계층적구조 지원을 위한 데이터타입(hierarchyid) 추가&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;날짜시간 데이터타입 추가&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;복합 연산자 지원( set @x += 2)&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;멀티-insert 지원&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;merge 구분 지원으로 조인 결과에 따른 insert/update/delete 구문 수행 가능&lt;/p&gt;       &lt;/li&gt;        &lt;li&gt;         &lt;p&gt;테이블 반환 매개 변수 지원&lt;/p&gt;       &lt;/li&gt;     &lt;/ol&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h4&gt;성능과 보안 측면에서 향상된 기능&lt;/h4&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;p&gt;전체 테이블 인덱스 -&amp;gt; 필터링된 인덱스 및 통계 지원으로 쿼리 성능 개선 및 인덱스 유지 관리 및 저장소 비용 감소&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;테이블 및 쿼리 힌트 향상으로 고급 쿼리 성능 튜닝시 정밀하게 제어 가능&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;잠금 에스컬레이션을 해제할 수 있어 분할 테이블의 경우 파티션 수준으로 잠금 구성 가능&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;데이터웨어하우스 쿼리 성능 향상 – 향상된 비트맵 필터링 참조&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;향상된 병렬 처리 쿼리&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;암호화 함수 지원, TRIPLE_DES_3KEY 사용 가능(DES 설명 제공)&lt;/p&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;p&gt;TDE(투명한 데이터 암호화) 기능은 응용 프로그램 독립적으로 데이터베이스 파일을 자동으로 암호화하는 옵션 제공.&lt;/p&gt;   &lt;/li&gt; &lt;/ol&gt;</description>
			<category>SQL Server</category>
			<author>Jeidee</author>
			<guid>http://blog.jeidee.net/836</guid>
			<comments>http://blog.jeidee.net/836#entry836comment</comments>
			<pubDate>Tue, 02 Feb 2010 16:06:36 +0900</pubDate>
		</item>
		<item>
			<title>SQL Server 2005 Analysis Services에 대한 HTTP 액세스 구성시 트러블슈팅</title>
			<link>http://blog.jeidee.net/834</link>
			<description>&lt;p&gt;SQL Server 2005 Analysis Services(이하 SSAS)에 접근하기 위해 클라이언트가 직접 SSAS에 연결하는 대신 HTTP를 통해 IIS 웹서버를 경유하도록 구성할 수 있습니다.&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;Windows 2003서버에서 SSAS에 대한 HTTP 액세스를 구성하는 상세한 방법은 MSDN의 다음 아티클을 참조하세요.&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;&lt;a title=&quot;http://msdn.microsoft.com/ko-kr/library/cc917711.aspx&quot; href=&quot;http://msdn.microsoft.com/ko-kr/library/cc917711.aspx&quot;&gt;http://msdn.microsoft.com/ko-kr/library/cc917711.aspx&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;여기에서는 IIS를 경유하도록 구성한 시스템에서 오류가 발생할 경우 해결방법에 대해 기술합니다.&lt;/p&gt;
  &lt;p&gt;(이 문서는 향후 계속 갱신하도록 합니다.)&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;#1. 클라이언트에서 전송계층 오류 발생&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;- 오류 메시지&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;한글&lt;/p&gt;
  &lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot; width=&quot;400&quot;&gt;
&lt;tbody&gt;     &lt;tr&gt;
       &lt;td valign=&quot;top&quot; width=&quot;400&quot;&gt;쿼리를 실행할 수 없습니다.         &lt;br /&gt;
전송계층에서 오류가 발생했습니다.          &lt;br /&gt;
연결이 닫혔습니다.&lt;/td&gt;
     &lt;/tr&gt;
   &lt;/tbody&gt;&lt;/table&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;영문&lt;/p&gt;
  &lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot; width=&quot;400&quot;&gt;
&lt;tbody&gt;     &lt;tr&gt;
       &lt;td valign=&quot;top&quot; width=&quot;400&quot;&gt;         &lt;p&gt;The query could not be processed:           &lt;br /&gt;
An error was encounted in the transport layer            &lt;br /&gt;
The peer prematurely closed the connection.&lt;/p&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
   &lt;/tbody&gt;&lt;/table&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;- 증상&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;위와 같은 오류메시지를 출력하면서 데이터소스와 연결이 끊어진다.&lt;br /&gt;
SSAS서버는 정상 동작하고 있다.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;- 원인&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;IIS의 olap 사이트에 문제가 있는 것 같지만 정확한 원인을 찾을 수 없다.&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;- 해결&lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;IIS의 olap 가상디렉터리의 응용프로그램풀을 재시작(recyle)하면 해결된다.&lt;/p&gt;
  &lt;p&gt;해당 서버에 특정 시간 간격으로 olap 응용프로그램풀을 재시작하도록 배치작업을 생성했다.&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;olap_recyle.bat 파일 생성&lt;/p&gt;
  &lt;table border=&quot;1&quot; cellpadding=&quot;2&quot; cellspacing=&quot;0&quot; width=&quot;400&quot;&gt;
&lt;tbody&gt;     &lt;tr&gt;
       &lt;td valign=&quot;top&quot; width=&quot;400&quot;&gt;         &lt;p&gt;cd \windows\system32           &lt;br /&gt;
cscript iisapp.vbs /a olap /r&lt;/p&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
   &lt;/tbody&gt;&lt;/table&gt;</description>
			<category>SQL Server</category>
			<category>트러블슈팅</category>
			<author>Jeidee</author>
			<guid>http://blog.jeidee.net/834</guid>
			<comments>http://blog.jeidee.net/834#entry834comment</comments>
			<pubDate>Wed, 27 Jan 2010 13:51:08 +0900</pubDate>
		</item>
		<item>
			<title>Recyle application pool of IIS</title>
			<link>http://blog.jeidee.net/833</link>
			<description>&lt;p&gt;&lt;a title=&quot;http://sanjayapdl.wordpress.com/2008/04/30/restart-application-pool-instead-of-iis/&quot; href=&quot;http://sanjayapdl.wordpress.com/2008/04/30/restart-application-pool-instead-of-iis/&quot;&gt;http://sanjayapdl.wordpress.com/2008/04/30/restart-application-pool-instead-of-iis/&lt;/a&gt;&lt;/p&gt;</description>
			<category>Tools and System</category>
			<author>Jeidee</author>
			<guid>http://blog.jeidee.net/833</guid>
			<comments>http://blog.jeidee.net/833#entry833comment</comments>
			<pubDate>Mon, 25 Jan 2010 14:05:29 +0900</pubDate>
		</item>
		<item>
			<title>자바스크립트로 만든 플래쉬 런타임</title>
			<link>http://blog.jeidee.net/830</link>
			<description>&lt;p&gt;&lt;a title=&quot;http://paulirish.com/work/gordon/demos/&quot; href=&quot;http://paulirish.com/work/gordon/demos/&quot;&gt;http://paulirish.com/work/gordon/demos/&lt;/a&gt;&lt;/p&gt;</description>
			<category>스크랩</category>
			<author>Jeidee</author>
			<guid>http://blog.jeidee.net/830</guid>
			<comments>http://blog.jeidee.net/830#entry830comment</comments>
			<pubDate>Thu, 14 Jan 2010 17:10:43 +0900</pubDate>
		</item>
		<item>
			<title>양력, 음력 변환</title>
			<link>http://blog.jeidee.net/826</link>
			<description>&lt;p&gt;# 프로그램 소스 파일&lt;/p&gt;  &lt;p&gt;&lt;table style=&quot;display: inline; border-collapse: collapse&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://endlessprogramming.tistory.com/attachment/cfile1.uf@18033E1A4B31C2621811EC.cs&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/unknown.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; Lunar.cs&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;해당 클래스로 양력을 음력으로 변환할 수 있는 범위는 양력 1800-01-25 ~ 2050-01-22 까지이고,&lt;/p&gt;  &lt;p&gt;음력을 양력으로 변환할 수 있는 범위는 음력 1800-01-01 ~ 2049-12-08 까지이다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;다음 링크에서 c로 구현된 소스를 구해 일부 버그를 수정하고 변환 범위 확장 및 양력-&amp;gt;음력 변환 기능 추가, 음력 간지 계산 기능을 추가해서 c#으로 다시 작성했다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;링크(&lt;a title=&quot;http://openwrld.egloos.com/1417170&quot; href=&quot;http://openwrld.egloos.com/1417170&quot;&gt;http://openwrld.egloos.com/1417170&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;천문연구원의 음력/양력 변환 데이터와 대조 확인 완료했으며 위 변환 범위 내에서 문제 없음을 확인했다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;변환 클래스(Lunar)의 코드는 다음과 같다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div id=&quot;codeSnippetWrapper&quot;&gt;   &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot; id=&quot;codeSnippet&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;namespace&lt;/span&gt; Solar2Lunar&lt;br /&gt;{&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;/// 양력&amp;lt;-&amp;gt;음력 변환 클래스&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;/// 변환이 가능한 양력 범위(1800-01-25 ~ 2050-01-22)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;/// 변환이 가능한 음력 범위(1800-01-01 ~ 2049-12-08)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;/// 다음 링크에 있는 알고리즘을 C#코드로 수정해서 작성했음을 밝힌다.&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;/// http://openwrld.egloos.com/1417170&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;class&lt;/span&gt; Lunar&lt;br /&gt;    {&lt;br /&gt;        &lt;span style=&quot;color: #cc6633&quot;&gt;#region&lt;/span&gt; 음력데이터&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 음력 달의 특징&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 1: 평달 (작은달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 2: 평달 (큰달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 3: 윤달 (작은달 + 작은달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 4: 윤달 (작은달 + 큰달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 5: 윤달 (큰달 + 작은달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 6: 윤달 (큰달 + 큰달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 작은달=29, 큰달=30&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;readonly&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;[,] LUNAR_FEATURES = {{2,1,2,5,2,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1800 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,2,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1801 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,2,1,2,2,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1802 &lt;/span&gt;&lt;br /&gt;            {2,3,2,1,2,1,2,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1803 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,1,2,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1804 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,3,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1805 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,1,1,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1806 &lt;/span&gt;&lt;br /&gt;            {2,2,2,1,1,2,1,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1807 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,5,2,1,2,1,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1808 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,2,1,2,1,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1809 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,2,1,2,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1810 &lt;/span&gt;&lt;br /&gt;            {1,1,5,2,1,2,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1811 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,2,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1812 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1813 &lt;/span&gt;&lt;br /&gt;            {2,5,2,1,1,1,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1814 &lt;/span&gt;&lt;br /&gt;            {2,2,1,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1815 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,5,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1816 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,2,1,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1817 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,2,1,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1818 &lt;/span&gt;&lt;br /&gt;            {1,2,1,5,2,2,1,2,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1819 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,1,2,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1820 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,1,2,1,2,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1821 &lt;/span&gt;&lt;br /&gt;            {2,1,5,1,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1822 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,1,2,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1823 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,4,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1824 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1825 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1826 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,4,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1827 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1828 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1829 &lt;/span&gt;&lt;br /&gt;            {1,1,2,3,2,1,2,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1830 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,1,2,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1831 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,1,2,1,5,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1832 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,1,2,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1833 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1834 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,5,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1835 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,2,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1836 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,2,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1837 &lt;/span&gt;&lt;br /&gt;            {1,2,1,5,1,2,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1838 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1839 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1840 &lt;/span&gt;&lt;br /&gt;            {1,2,4,1,1,2,1,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1841 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1842 &lt;/span&gt;&lt;br /&gt;            {2,2,2,1,2,1,4,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1843 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1844 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,2,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1845 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,5,2,1,2,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1846 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,2,1,2,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1847 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1848 &lt;/span&gt;&lt;br /&gt;            {2,1,2,3,2,1,2,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1849 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1850 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,1,2,3,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1851 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,1,2,1,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1852 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1853 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,5,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1854 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,2,2,1,2,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1855 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,2,1,2,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1856 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,5,2,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1857 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1858 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1859 &lt;/span&gt;&lt;br /&gt;            {2,1,6,1,1,2,1,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1860 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,2,1,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1861 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,2,1,5,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1862 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,2,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1863 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,2,1,2,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1864 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,4,1,2,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1865 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,1,2,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1866 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1867 &lt;/span&gt;&lt;br /&gt;            {1,2,2,3,2,1,1,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1868 &lt;/span&gt;&lt;br /&gt;            {2,2,2,1,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1869 &lt;/span&gt;&lt;br /&gt;            {2,2,2,1,2,1,2,1,1,5,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1870 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,2,1,2,1,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1871 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,2,1,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1872 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,2,4,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1873 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,2,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1874 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1875 &lt;/span&gt;&lt;br /&gt;            {2,2,1,1,5,1,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1876 &lt;/span&gt;&lt;br /&gt;            {2,2,1,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1877 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1878 &lt;/span&gt;&lt;br /&gt;            {2,2,4,2,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1879 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,2,1,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1880 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,5,2,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1881 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1882 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,1,2,1,2,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1883 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,3,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1884 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,1,2,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1885 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1886 &lt;/span&gt;&lt;br /&gt;            {2,2,1,5,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1887 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1888 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1889 &lt;/span&gt;&lt;br /&gt;            {1,5,2,1,2,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1890 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1891 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,1,5,2,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1892 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,1,2,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1893 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,1,2,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1894 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,5,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1895 &lt;/span&gt;&lt;br /&gt;            {2,2,2,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1896 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1897 &lt;/span&gt;&lt;br /&gt;            {2,1,5,2,2,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1898 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,2,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1899 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,5,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1900 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1901 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1902 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,3,2,1,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1903 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,1,2,1,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1904 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1905 &lt;/span&gt;&lt;br /&gt;            {1,2,2,4,1,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1906 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1907 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,2,1,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1908 &lt;/span&gt;&lt;br /&gt;            {1,5,1,2,1,2,1,2,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1909 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1910 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,5,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1911 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1912 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,1,2,1,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1913 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,5,1,2,1,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1914 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1915 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1916 &lt;/span&gt;&lt;br /&gt;            {2,3,2,1,2,2,1,2,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1917 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,2,1,2,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1918 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,5,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1919 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1920 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1921 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,3,2,1,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1922 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,2,1,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1923 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,2,1,2,1,2,1,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1924 &lt;/span&gt;&lt;br /&gt;            {2,1,2,5,2,1,2,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1925 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,2,1,2,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1926 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1927 &lt;/span&gt;&lt;br /&gt;            {1,5,1,2,1,1,2,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1928 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1929 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,1,5,1,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1930 &lt;/span&gt;&lt;br /&gt;            {2,2,2,1,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1931 &lt;/span&gt;&lt;br /&gt;            {2,2,2,1,2,1,2,1,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1932 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,6,1,2,1,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1933 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,2,1,2,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1934 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,2,1,2,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1935 &lt;/span&gt;&lt;br /&gt;            {2,1,4,1,2,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1936 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1937 &lt;/span&gt;&lt;br /&gt;            {2,2,1,1,2,1,4,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1938 &lt;/span&gt;&lt;br /&gt;            {2,2,1,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1939 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1940 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,2,4,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1941 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,2,1,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1942 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1943 &lt;/span&gt;&lt;br /&gt;            {1,1,2,4,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1944 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,1,2,1,2,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1945 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,1,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1946 &lt;/span&gt;&lt;br /&gt;            {2,5,1,2,1,1,2,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1947 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1948 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,2,3,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1949 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1950 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1951 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,4,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1952 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1953 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1954 &lt;/span&gt;&lt;br /&gt;            {2,1,4,1,1,2,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1955 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,1,2,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1956 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,1,5,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1957 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1958 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1959 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,5,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1960 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,2,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1961 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1962 &lt;/span&gt;&lt;br /&gt;            {2,1,2,3,2,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1963 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1964 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,1,2,1,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1965 &lt;/span&gt;&lt;br /&gt;            {1,2,5,2,1,1,2,1,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1966 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1967 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,5,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1968 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1969 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,2,1,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1970 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,5,2,1,2,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1971 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1972 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1973 &lt;/span&gt;&lt;br /&gt;            {2,2,1,5,1,2,1,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1974 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,1,2,1,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1975 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,2,1,5,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1976 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,2,1,2,1,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1977 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,2,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1978 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,6,1,2,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1979 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1980 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1981 &lt;/span&gt;&lt;br /&gt;            {2,1,2,3,2,1,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1982 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1983 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,1,2,1,1,5,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1984 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,2,1,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1985 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,2,1,2,1,2,1,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1986 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,5,2,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1987 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,2,1,2,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1988 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1989 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,5,1,2,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1990 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1991 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,1,2,1,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1992 &lt;/span&gt;&lt;br /&gt;            {1,2,5,2,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1993 &lt;/span&gt;&lt;br /&gt;            {2,2,2,1,2,1,2,1,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1994 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,2,1,5,2,1,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1995 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,2,1,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 1996 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,2,1,2,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1997 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,3,2,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1998 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 1999 &lt;/span&gt;&lt;br /&gt;            {2,2,1,1,2,1,1,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2000 &lt;/span&gt;&lt;br /&gt;            {2,2,2,3,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2001 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2002 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,2,1,2,1,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2003 &lt;/span&gt;&lt;br /&gt;            {1,5,2,2,1,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2004 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,2,1,2,2,1,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2005 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,5,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2006 &lt;/span&gt;&lt;br /&gt;            {1,1,2,1,1,2,1,2,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2007 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,1,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2008 &lt;/span&gt;&lt;br /&gt;            {2,2,1,1,5,1,2,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2009 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2010 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2011 &lt;/span&gt;&lt;br /&gt;            {2,1,6,2,1,2,1,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2012 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2013 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,2,1,2,5,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2014 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,2,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2015 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2016 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,3,2,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2017 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,1,2,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2018 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2019 &lt;/span&gt;&lt;br /&gt;            {2,1,2,5,2,1,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2020 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2021 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,2,1,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2022 &lt;/span&gt;&lt;br /&gt;            {1,5,2,1,2,1,2,2,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2023 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,2,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2024 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,5,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2025 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2026 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,1,1,2,1,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2027 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,5,1,2,1,1,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2028 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,2,1,1,2,1,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2029 &lt;/span&gt;&lt;br /&gt;            {1,2,1,2,2,1,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2030 &lt;/span&gt;&lt;br /&gt;            {2,1,5,2,1,2,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2031 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,2,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2032 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,1,2,2,5,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2033 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,2,1,2,2,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2034 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2035 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,4,1,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2036 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,1,2,1,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2037 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,1,2,1,2,1,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2038 &lt;/span&gt;&lt;br /&gt;            {2,2,1,2,5,2,1,2,1,2,1,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2039 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,2,2,1,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2040 &lt;/span&gt;&lt;br /&gt;            {2,1,1,2,1,2,2,1,2,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2041 &lt;/span&gt;&lt;br /&gt;            {1,5,1,2,1,2,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2042 &lt;/span&gt;&lt;br /&gt;            {1,2,1,1,2,1,1,2,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2043 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,3,2,1,2,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2044 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,1,2,1,1,2,1,2,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2045 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,1,1,2,1,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2046 &lt;/span&gt;&lt;br /&gt;            {2,1,2,2,4,1,2,1,1,2,1,2}, &lt;span style=&quot;color: #008000&quot;&gt;// 2047 &lt;/span&gt;&lt;br /&gt;            {1,2,2,1,2,2,1,2,1,2,1,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2048 &lt;/span&gt;&lt;br /&gt;            {2,1,2,1,2,2,1,2,2,1,2,1}, &lt;span style=&quot;color: #008000&quot;&gt;// 2049&lt;/span&gt;&lt;br /&gt;        };&lt;br /&gt;        &lt;span style=&quot;color: #cc6633&quot;&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 음력 달의 특징&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 0: 평달 (작은달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 1: 평달 (큰달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 2: 윤달 (작은달 + 작은달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 3: 윤달 (작은달 + 큰달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 4: 윤달 (큰달 + 작은달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 5: 윤달 (큰달 + 큰달)&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 작은달=29, 큰달=30&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;readonly&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;[] DAYS_OF_LUNAR_FEATURES = { 29, 30, 58, 59, 59, 60 };&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;readonly&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;[] NORMAL_DAYS_OF_LEAP_MONTH = { 0, 0, 29, 29, 30, 30 };&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 양력 달의 날 수&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;readonly&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;[] SOLAR_DAYS_OF_MONTH = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 10간&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;readonly&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;[] GAN = { &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;갑&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;을&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;병&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;정&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;무&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;기&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;경&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;신&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;임&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;계&amp;quot;&lt;/span&gt; };&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 12지&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;readonly&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;[] JI = { &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;자&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;축&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;인&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;묘&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;진&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;사&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;오&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;미&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;신&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;유&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;술&amp;quot;&lt;/span&gt;, &lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;해&amp;quot;&lt;/span&gt; };&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;// 1800-01-25 (토)    1800-01-01    경신(庚申)년 무인(戊寅)월 갑인(甲寅)일    &lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;readonly&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;[] SOLAR_BASIC_DATE = { 1800, 1, 25 };  &lt;span style=&quot;color: #008000&quot;&gt;// 년, 월, 일&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;readonly&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;[] BASIC_GANJI = { 6, 8, 4, 2, 0, 2 };  &lt;span style=&quot;color: #008000&quot;&gt;// 경신년, 무인월, 갑인일&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 양력 달의 날 수 조회&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 윤년일 경우 2월은 29일&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;year&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;month&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; GetSolarDaysOfMonth(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; year, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; month)&lt;br /&gt;        {    &lt;span style=&quot;color: #008000&quot;&gt;// 월별 일수 계산&lt;/span&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (month != 2)&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; SOLAR_DAYS_OF_MONTH[month - 1];&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (IsLeapYear(year))&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; 29;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt;&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; 28;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 윤년체크&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;year&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; IsLeapYear(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; year)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; ((year % 400 == 0) || ((year % 100 != 0) &amp;amp;&amp;amp; (year % 4 == 0)))&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;true&lt;/span&gt;;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt;&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 양력 해의 날 수 조회&amp;lt;br/&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 윤년일 경우 366일, 평년일 경우 365일&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;year&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; GetSolarDaysOfYear(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; year)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (IsLeapYear(year))&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; 366;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;else&lt;/span&gt;&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; 365;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 특정 일자의 양력 날 수 조회&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;year&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;month&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;day&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; GetSolarDays(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; year, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; month, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; day)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ret = 0;&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; i = SOLAR_BASIC_DATE[0]; i &amp;lt; year; i++)&lt;br /&gt;                ret += GetSolarDaysOfYear(i);&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; i = 1; i &amp;lt; month; i++)&lt;br /&gt;                ret += GetSolarDaysOfMonth(year, i);&lt;br /&gt;&lt;br /&gt;            ret += day;&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; i = 1; i &amp;lt; SOLAR_BASIC_DATE[1]; i++)&lt;br /&gt;                ret -= GetSolarDaysOfMonth(SOLAR_BASIC_DATE[0], i);&lt;br /&gt;&lt;br /&gt;            ret -= SOLAR_BASIC_DATE[2];&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; ret;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 특정 일자의 음력 날 수 조회&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;ly&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;lm&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;ld&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;leapMonth&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; GetLunarDays(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ly, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lm, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ld, &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; leapMonth)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ret = 0;&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; i = SOLAR_BASIC_DATE[0]; i &amp;lt; ly; i++)&lt;br /&gt;                ret += GetLunarDaysOfYear(i);&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; i = 1; i &amp;lt; lm; i++)&lt;br /&gt;                ret += GetLunarDaysOfMonth(ly, i);&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #008000&quot;&gt;// 윤달일 경우 동월 평달 날짜 더해 줌&lt;/span&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (leapMonth)&lt;br /&gt;            {&lt;br /&gt;                ret += NORMAL_DAYS_OF_LEAP_MONTH[LUNAR_FEATURES[ly - SOLAR_BASIC_DATE[0], lm - 1] - 1];&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            ret += ld;&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; ret;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 양력을 음력으로 변환&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;year&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;month&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;day&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ToLunarDate(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; year, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; month, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; day)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ly = 0, lm = 0, ld = 0;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; ToLunarDate(GetSolarDays(year, month, day), &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; ly, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; lm, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; ld);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 양력을 음력으로 변환&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;solarDays&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;ly&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;lm&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;ld&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ToLunarDate(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; solarDays, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ly, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lm, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ld)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lunarDays = 0;&lt;br /&gt;            ly = 0;&lt;br /&gt;            lm = 0;&lt;br /&gt;            ld = 0;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; y = 0; y &amp;lt; LUNAR_FEATURES.GetLength(0); y++)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; m = 0; m &amp;lt; 12; m++)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lday = DAYS_OF_LUNAR_FEATURES[LUNAR_FEATURES[y, m] - 1];&lt;br /&gt;&lt;br /&gt;                    &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (lunarDays + lday &amp;gt; solarDays)&lt;br /&gt;                    {&lt;br /&gt;                        ly = y + SOLAR_BASIC_DATE[0];&lt;br /&gt;                        lm = m + 1;&lt;br /&gt;                        ld = solarDays - lunarDays + 1;&lt;br /&gt;                        &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (ld &amp;gt; NORMAL_DAYS_OF_LEAP_MONTH[LUNAR_FEATURES[y, m] - 1])&lt;br /&gt;                            ld -= NORMAL_DAYS_OF_LEAP_MONTH[LUNAR_FEATURES[y, m] - 1];&lt;br /&gt;                        &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Format(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;{0:0000}-{1:00}-{2:00}&amp;quot;&lt;/span&gt;, ly, lm, ld);&lt;br /&gt;                    }&lt;br /&gt;&lt;br /&gt;                    lunarDays += lday;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Format(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;{0:0000}-{1:00}-{2:00}&amp;quot;&lt;/span&gt;, ly, lm, ld);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 음력을 양력으로 변환&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;ly&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;lm&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;ld&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;leapMonth&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ToSolarDate(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ly, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lm, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ld, &lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; leapMonth)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; year = 0, month = 0, day = 0;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; ToLunarDate(GetLunarDays(ly, lm, ld, leapMonth), &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; year, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; month, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; day);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 음력을 양력으로 변환&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;lunarDays&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;year&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;month&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;day&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ToSolarDate(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lunarDays, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; year, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; month, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; day)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; solarDays = 0;&lt;br /&gt;            year = 0;&lt;br /&gt;            month = 0;&lt;br /&gt;            day = 0;&lt;br /&gt;&lt;br /&gt;            lunarDays += SOLAR_BASIC_DATE[2] - 1;&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; y = 0; y &amp;lt; LUNAR_FEATURES.GetLength(0); y++)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; m = 0; m &amp;lt; 12; m++)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lday = GetSolarDaysOfMonth(y + SOLAR_BASIC_DATE[0], m + 1);&lt;br /&gt;&lt;br /&gt;                    &lt;span style=&quot;color: #0000ff&quot;&gt;if&lt;/span&gt; (solarDays + lday &amp;gt;= lunarDays)&lt;br /&gt;                    {&lt;br /&gt;                        year = y + SOLAR_BASIC_DATE[0];&lt;br /&gt;                        month = m + 1;&lt;br /&gt;                        day = lunarDays - solarDays;&lt;br /&gt;&lt;br /&gt;                        &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Format(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;{0:0000}-{1:00}-{2:00}&amp;quot;&lt;/span&gt;, year, month, day);&lt;br /&gt;                    }&lt;br /&gt;&lt;br /&gt;                    solarDays += lday;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt;.Format(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;{0:0000}-{1:00}-{2:00}&amp;quot;&lt;/span&gt;, year, month, day);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 음력 연도의 간지 문자열 조회&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;ly&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; GetYearGanji(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ly)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; gan = GAN[(ly - SOLAR_BASIC_DATE[0] + BASIC_GANJI[0]) % 10];&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ji = JI[(ly - SOLAR_BASIC_DATE[0] + BASIC_GANJI[1]) % 12];&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; gan + ji;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 음력 월의 간지 문자열 조회&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;ly&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;lm&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; GetMonthGanji(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ly, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lm)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lunarMonthes = (ly - SOLAR_BASIC_DATE[0]) * 12 + lm - 1;&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; gan = GAN[(lunarMonthes + BASIC_GANJI[2]) % 10];&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ji = JI[(lunarMonthes + BASIC_GANJI[3]) % 12];&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; gan + ji;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 음력 날의 간지 문자열 조회&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;totalDaySolar&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; GetDayGanji(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; solarDays)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; gan = GAN[(solarDays + BASIC_GANJI[4]) % 10];&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ji = JI[(solarDays + BASIC_GANJI[5]) % 12];&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; gan + ji;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 음력 연도의 전체 날 수&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;ly&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; GetLunarDaysOfYear(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ly)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ret = 0;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; i = 0; i &amp;lt; 12; i++)&lt;br /&gt;            {&lt;br /&gt;                ret += DAYS_OF_LUNAR_FEATURES[LUNAR_FEATURES[ly - SOLAR_BASIC_DATE[0], i] - 1];&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; ret;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 음력 월의 날 수&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;ly&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;lm&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; GetLunarDaysOfMonth(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ly, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lm)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; DAYS_OF_LUNAR_FEATURES[LUNAR_FEATURES[ly - SOLAR_BASIC_DATE[0], lm - 1] - 1];&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// 양력 연도의 특정 월까지의 전체 날 수&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;year&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;param name=&amp;quot;month&amp;quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; GetSolarDaysOfYear(&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; year, &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; month)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ret = 0;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;for&lt;/span&gt; (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; i = 0; i &amp;lt; month; i++)&lt;br /&gt;            {&lt;br /&gt;                ret += GetSolarDaysOfMonth(year, i + 1);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;span style=&quot;color: #0000ff&quot;&gt;return&lt;/span&gt; ret;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div id=&quot;codeSnippetWrapper&quot;&gt;Lunar 클래스는 다음 처럼 사용한다.&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div id=&quot;codeSnippetWrapper&quot;&gt;
  &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot; id=&quot;codeSnippet&quot;&gt;Lunar lunar = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Lunar();&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ly = 2000;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; lm = 2;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; ld = 22;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;bool&lt;/span&gt; leapMonth = &lt;span style=&quot;color: #0000ff&quot;&gt;false&lt;/span&gt;; &lt;span style=&quot;color: #008000&quot;&gt;// 윤달 여부&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; year = 0;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; month = 0;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; day = 0;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;string&lt;/span&gt; ret = lunar.ToSolarDate(lunar.GetLunarDays(ly, lm, ld, leapMonth), &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; year, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; month, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; day);&lt;br /&gt;Console.WriteLine(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;평달 음력 {0}년 {1}월 {2}일은 양력 {3}년 {4}월 {5}일 입니다.&amp;quot;&lt;/span&gt;,&lt;br /&gt;    ly, lm, ld,&lt;br /&gt;    year, month, day);&lt;br /&gt;&lt;br /&gt;ret = lunar.ToLunarDate(lunar.GetSolarDays(year, month, day), &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; ly, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; lm, &lt;span style=&quot;color: #0000ff&quot;&gt;out&lt;/span&gt; ld);&lt;br /&gt;Console.WriteLine(&lt;span style=&quot;color: #006080&quot;&gt;&amp;quot;양력 {0}년 {1}월 {2}일은 음력 {3}년 {4}월 {5}일 입니다.&amp;quot;&lt;/span&gt;,&lt;br /&gt;    year, month, day,&lt;br /&gt;    ly, lm, ld);&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div id=&quot;codeSnippetWrapper&quot;&gt;&amp;#160;&lt;/div&gt;
끝.</description>
			<category>C#</category>
			<author>Jeidee</author>
			<guid>http://blog.jeidee.net/826</guid>
			<comments>http://blog.jeidee.net/826#entry826comment</comments>
			<pubDate>Wed, 23 Dec 2009 16:09:39 +0900</pubDate>
		</item>
		<item>
			<title>아날로그 시계 만들어 보기 #5 : 완성</title>
			<link>http://blog.jeidee.net/819</link>
			<description>&lt;br /&gt;&lt;strong&gt;관련 포스트   &lt;br /&gt;&lt;/strong&gt;  &lt;br /&gt;  &lt;div style=&quot;border-bottom: #c1c1c1 1px dashed; border-left: #c1c1c1 1px dashed; padding-bottom: 10px; background-color: #eeeeee; padding-left: 10px; padding-right: 10px; border-top: #c1c1c1 1px dashed; border-right: #c1c1c1 1px dashed; padding-top: 10px&quot; class=&quot;txc-textbox&quot;&gt;&lt;a href=&quot;http://blog.jeidee.net/812&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 데카르트 좌표계(Cartesian coordinates) 클래스&lt;/a&gt;    &lt;br /&gt;&lt;a href=&quot;http://blog.jeidee.net/813&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 아날로그 시계 만들어 보기 #1 : 삼각함수를 이용해 원주위의 좌표 구하기&lt;/a&gt;    &lt;br /&gt;&lt;a href=&quot;http://blog.jeidee.net/814&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 아날로그 시계 만들어 보기 #2 : 시계 완성&lt;/a&gt;    &lt;br /&gt;&lt;a href=&quot;http://blog.jeidee.net/816&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 아날로그 시계 만들어 보기 #3 : 이미지를 사용해서 만들기&lt;/a&gt;    &lt;br /&gt;&lt;a href=&quot;http://blog.jeidee.net/817&quot; target=&quot;_blank&quot;&gt;2009/12/14 - [C#] - 아날로그 시계 만들어 보기 #4 : 이미지를 사용해서 만들기(2)&lt;/a&gt;    &lt;br /&gt;&lt;/div&gt;  &lt;p&gt;   &lt;br /&gt;&lt;strong&gt;소스 다운로드     &lt;br /&gt;&lt;/strong&gt;&lt;table style=&quot;display: inline; border-collapse: collapse&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://endlessprogramming.tistory.com/attachment/cfile21.uf@170CA6114B29DF88674CA1.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; Clock.zip&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;이번에는 다음과 같이 실제 시계처럼 시계 바늘의 회전축을 중심으로 회전하도록 수정해 보자.&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/1777720F4B29E03F136519&quot;&gt;&lt;img style=&quot;border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile25.uf.tistory.com/image/132A3B0D4B29E04060C2B0&quot; width=&quot;243&quot; height=&quot;244&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;소스는 다음과 같다.&lt;/p&gt;  &lt;div id=&quot;codeSnippetWrapper&quot;&gt;   &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot; id=&quot;codeSnippet&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; DrawHands(CartesianCoordinates cd, &lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt; rad, SizeF size)&lt;br /&gt;{&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; (Bitmap bitmap = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Bitmap((&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;)size.Width, (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;)size.Height))&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;using&lt;/span&gt; (Graphics g = Graphics.FromImage(bitmap))&lt;br /&gt;    {&lt;br /&gt;        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;&lt;br /&gt;        g.FillRectangle(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; SolidBrush(Color.Blue), &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Rectangle(0, 0, (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;)size.Width, (&lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt;)size.Height));&lt;br /&gt;&lt;br /&gt;        PointF p1 = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF();&lt;br /&gt;        PointF p2 = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF();&lt;br /&gt;        PointF p3 = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF();&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt; ox = 20;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt; twidth;&lt;br /&gt;        &lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt; atanA;&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;// 왼쪽 위 좌표&lt;/span&gt;&lt;br /&gt;        twidth = Math.Sqrt(Math.Pow(ox, 2) + Math.Pow(size.Height / 2, 2));&lt;br /&gt;        atanA = Math.Atan((size.Height / 2) / ox);&lt;br /&gt;        p1.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(twidth * Math.Cos(rad - (Math.PI - atanA)));&lt;br /&gt;        p1.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(twidth * Math.Sin(rad - (Math.PI - atanA)));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;// 오른쪽 위 좌표&lt;/span&gt;&lt;br /&gt;        twidth = Math.Sqrt(Math.Pow(size.Width , 2) + Math.Pow(size.Height / 2, 2));&lt;br /&gt;        atanA = Math.Atan((size.Height / 2) / (size.Width ));&lt;br /&gt;        p2.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(twidth * Math.Cos(rad - atanA));&lt;br /&gt;        p2.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(twidth * Math.Sin(rad - atanA));&lt;br /&gt;&lt;br /&gt;        &lt;span style=&quot;color: #008000&quot;&gt;// 왼쪽 아래 좌표&lt;/span&gt;&lt;br /&gt;        twidth = Math.Sqrt(Math.Pow(ox, 2) + Math.Pow(size.Height / 2, 2));&lt;br /&gt;        atanA = Math.Atan((size.Height / 2) / ox);&lt;br /&gt;        p3.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(twidth * Math.Cos(rad - (Math.PI + atanA)));&lt;br /&gt;        p3.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(twidth * Math.Sin(rad - (Math.PI + atanA)));&lt;br /&gt;&lt;br /&gt;        cd.DrawImage(bitmap, &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF[] { p1, p2, p3 }, 90);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;div id=&quot;codeSnippetWrapper&quot;&gt;끝.
  &lt;br /&gt;&lt;/div&gt;</description>
			<category>C#</category>
			<author>Jeidee</author>
			<guid>http://blog.jeidee.net/819</guid>
			<comments>http://blog.jeidee.net/819#entry819comment</comments>
			<pubDate>Thu, 17 Dec 2009 16:35:19 +0900</pubDate>
		</item>
		<item>
			<title>이미지 투명도 설정</title>
			<link>http://blog.jeidee.net/818</link>
			<description>&lt;p&gt;&lt;a title=&quot;http://www.geekpedia.com/code110_Set-Image-Opacity-Using-Csharp.html&quot; href=&quot;http://www.geekpedia.com/code110_Set-Image-Opacity-Using-Csharp.html&quot;&gt;http://www.geekpedia.com/code110_Set-Image-Opacity-Using-Csharp.html&lt;/a&gt;&lt;/p&gt;</description>
			<category>C#</category>
			<author>Jeidee</author>
			<guid>http://blog.jeidee.net/818</guid>
			<comments>http://blog.jeidee.net/818#entry818comment</comments>
			<pubDate>Thu, 17 Dec 2009 14:51:08 +0900</pubDate>
		</item>
		<item>
			<title>아날로그 시계 만들어 보기 #4 : 이미지를 사용해서 만들기(2)</title>
			<link>http://blog.jeidee.net/817</link>
			<description>&lt;p&gt;관련 포스트&lt;/p&gt;
&lt;p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-top-style: dashed; border-right-style: dashed; border-bottom-style: dashed; border-left-style: dashed; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(193, 193, 193); border-right-color: rgb(193, 193, 193); border-bottom-color: rgb(193, 193, 193); border-left-color: rgb(193, 193, 193); background-color: rgb(238, 238, 238); padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px; &quot;&gt;
&lt;a href=&quot;http://blog.jeidee.net/812&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 데카르트 좌표계(Cartesian coordinates) 클래스&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.jeidee.net/813&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 아날로그 시계 만들어 보기 #1 : 삼각함수를 이용해 원주위의 좌표 구하기&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.jeidee.net/814&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 아날로그 시계 만들어 보기 #2 : 시계 완성&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.jeidee.net/816&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 아날로그 시계 만들어 보기 #3 : 이미지를 사용해서 만들기&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/p&gt;
  &lt;p&gt;프로그램 소스&lt;/p&gt;
&lt;p&gt;&lt;table style=&quot;display: inline; border-collapse: collapse&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;http://endlessprogramming.tistory.com/attachment/cfile5.uf@1614451D4B25E1E26FA5E6.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; Clock.zip&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;
&lt;/p&gt;  &lt;p&gt;이전 포스트에서 이미지를 사용해 만든 시계는 부자연스러운 점이 있다.&lt;/p&gt;
  &lt;p&gt;시계바늘 이미지가 왼쪽위 모서리를 중심으로 돌기 때문인데, 다음과 같은 모양이 출력된다.&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/image/176A630E4B25DDA39724FD&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/187A7F054B25DDA3579629&quot; height=&quot;130&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;왼쪽 변의 중앙을 중심으로 돌도록 다음과 같이 수정해 보도록 한다.&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/image/187D310F4B25DDA4C70122&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/191A25124B25DDA34C159F&quot; height=&quot;225&quot; /&gt;&lt;/a&gt; &lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;다음 그림을 보자.&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/image/146BB8114B25DDA4581BC0&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/1845060F4B25DDA501E9F2&quot; width=&quot;244&quot; height=&quot;192&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;왼쪽변 p1p3의 중점 o를 중심으로 시계바늘 이미지를 회전시켜야 한다.&lt;/p&gt;
  &lt;p&gt;선분 op에서 p의 좌표는 구하는 방법을 이미 알고 있다.(이전 포스트 참조) &lt;/p&gt;
  &lt;p&gt;포인트 o(x,y)를 중심으로 회전하려면 p1, p2, p3의 좌표를 구해야 하는데 선분 op를 기준으로 다음과 같이 구할 수 있다.&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;div id=&quot;codeSnippetWrapper&quot;&gt;
   &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#039;Courier New&#039;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot; id=&quot;codeSnippet&quot;&gt;&lt;span style=&quot;color: #008000&quot;&gt;// 중심선(선분op)보다 90도(∏/2) 앞서 있다.&lt;/span&gt;&lt;br /&gt;
p1.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)((&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)_hImg.Size.Height / 2 * Math.Cos(rad - Math.PI / 2));&lt;br /&gt;
p1.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)((&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)_hImg.Size.Height / 2 * Math.Sin(rad - Math.PI / 2));&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;color: #008000&quot;&gt;// 오른쪽 위 좌표(p2)의 반지름(선분op2)은 (밑변(op)의제곱 + 높이/2(pp2)의제곱)의 제곱근&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #008000&quot;&gt;// 중심선(선분op)과 선분op2의 radian A = atan(pp2/op)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: #008000&quot;&gt;// 중심선(선분op)보다 radian A만큼 앞서 있다.&lt;/span&gt;&lt;br /&gt;
twidth = Math.Sqrt(Math.Pow(_hImg.Size.Width, 2) + Math.Pow(_hImg.Size.Height / 2, 2));&lt;br /&gt;
atanA = Math.Atan(((&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)_hImg.Size.Height/2) / _hImg.Size.Width);&lt;br /&gt;
p2.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(twidth * Math.Cos(rad - atanA));    &lt;span style=&quot;color: #008000&quot;&gt;// 밑변=width, 높이=heigt/2를 알때 tanA의 각도A는 atanA&lt;/span&gt;&lt;br /&gt;
p2.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(twidth * Math.Sin(rad - atanA));&lt;br /&gt;
&lt;br /&gt;&lt;span style=&quot;color: #008000&quot;&gt;// 중심선(선분op)보다 90도(∏/2) 뒤에 있다.&lt;/span&gt;&lt;br /&gt;
p3 = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF();&lt;br /&gt;
p3.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(_hImg.Size.Height / 2 * Math.Cos(rad + Math.PI / 2));&lt;br /&gt;
p3.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(_hImg.Size.Height / 2 * Math.Sin(rad + Math.PI / 2));&lt;br /&gt;
cd.DrawImage(_hImg, &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF[] { p1, p2, p3 });&lt;/pre&gt;

  &lt;br /&gt;
&lt;/div&gt;

&lt;p&gt;p1의 경우 중심선 op보다 90도 앞에 있고 p3의 경우 90도 뒤에 있으므로 수식이 간단하지만 p2의 경우에는 A각 만큼 앞서 있으므로 A각을 먼저 구해야 한다.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;tanA는 pp2/op이므로 역함수 atan으로 radian A를 구할 수 있다.(atanA = atan(tanA))&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;끝.&lt;/p&gt;</description>
			<category>C#</category>
			<author>Jeidee</author>
			<guid>http://blog.jeidee.net/817</guid>
			<comments>http://blog.jeidee.net/817#entry817comment</comments>
			<pubDate>Mon, 14 Dec 2009 15:39:33 +0900</pubDate>
		</item>
		<item>
			<title>아날로그 시계 만들어 보기 #3 : 이미지를 사용해서 만들기</title>
			<link>http://blog.jeidee.net/816</link>
			<description>&lt;p&gt;관련 포스트    &lt;br /&gt;&lt;/p&gt;  &lt;div style=&quot;border-bottom: rgb(193,193,193) 1px dashed; border-left: rgb(193,193,193) 1px dashed; padding-bottom: 10px; background-color: rgb(238,238,238); padding-left: 10px; padding-right: 10px; border-top: rgb(193,193,193) 1px dashed; border-right: rgb(193,193,193) 1px dashed; padding-top: 10px&quot; class=&quot;txc-textbox&quot;&gt;&lt;a href=&quot;http://blog.jeidee.net/812&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 데카르트 좌표계(Cartesian coordinates) 클래스&lt;/a&gt;    &lt;br /&gt;&lt;a href=&quot;http://blog.jeidee.net/813&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 아날로그 시계 만들어 보기 #1 : 삼각함수를 이용해 원주위의 좌표 구하기&lt;/a&gt;    &lt;br /&gt;&lt;a href=&quot;http://blog.jeidee.net/814&quot; target=&quot;_blank&quot;&gt;2009/12/11 - [C#] - 아날로그 시계 만들어 보기 #2 : 시계 완성&lt;/a&gt;    &lt;br /&gt;&lt;/div&gt;  &lt;p&gt;프로그램 소스&lt;/p&gt;  &lt;p&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://endlessprogramming.tistory.com/attachment/cfile24.uf@127C9A204B22165DB3A0B3.zip&quot;&gt;&lt;img src=&quot;http://cfs.tistory.com/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; Clock.zip&lt;/a&gt;&lt;/div&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;이번에는 시침/분침/초침을 이미지를 사용해 만들어보도록 하자.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;# 이미지의 회전 : Graphics.DrawImage(Image image, PointF[] destPoints)&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;이미지를 출력하는 Graphics.DrawImage 메서드 중에 Graphics.DrawImage(Image image, PointF[] destPoints) 메서드를 살펴보자.&lt;/p&gt;  &lt;p&gt;이 메서드의 두번째 매개변수인 PointF[] destPoints는 세 개의 포인트 좌표를 사용한다.&lt;/p&gt;  &lt;p&gt;이미지를 평행사변형으로 보고 이미지가 회전되었을때 왼쪽위, 오른쪽위 왼쪽아래 세 개의 꼭지점 좌표만 알면 회전을 구현할 수 있는데 이 세 개의 꼭지점 좌표를 배열로 받는 것이다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;다음 그림을 보면,&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/image/157B320E4B22159C14A137&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/147A030D4B22159C1A582A&quot; width=&quot;478&quot; height=&quot;450&quot; /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;왼쪽위 좌표는 원점이고 오른쪽위 좌표는 p에서 p’로 왼쪽아래 좌표는 q에서 q’로 변화되어 이미지가 원점을 중심으로 회전했음을 알 수 있다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;포인트 p와 p’는 삼각함수를 사용해 반지름이 w일때 각도에 따른 원주위의 좌표를 구하면 되고,&lt;/p&gt;  &lt;p&gt;문제는 q와 q’의 좌표를 구하는 것이다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;q와 q’의 좌표도 잘 살펴보면 h를 반지름으로 하는 작은 원주위의 좌표임을 알 수 있고 p의 좌표와 90도 차이남을 알 수 있다.&lt;/p&gt;  &lt;p&gt;즉, 다음과 같은 코드로 q와 q’의 좌표를 구할 수 있다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div id=&quot;codeSnippetWrapper&quot;&gt;   &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot; id=&quot;codeSnippet&quot;&gt;pt2 = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF();&lt;br /&gt;pt2.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(_sImg.Size.Height * Math.Cos(rad + Math.PI / 2));&lt;br /&gt;pt2.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(_sImg.Size.Height * Math.Sin(rad + Math.PI / 2));&lt;br /&gt;&lt;span style=&quot;color: #008000&quot;&gt;//cd.DrawLine(new PointF(0, 0), pt);&lt;/span&gt;&lt;br /&gt;cd.DrawImage(_sImg, &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF[] { &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF(0, 0), pt, pt2 });&lt;br /&gt;&lt;/pre&gt;

  &lt;br /&gt;&lt;/div&gt;

&lt;p&gt;전체 프로그램 소스는 다음과 같다.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div id=&quot;codeSnippetWrapper&quot;&gt;
  &lt;div id=&quot;codeSnippetWrapper&quot;&gt;
    &lt;pre style=&quot;border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &amp;#39;Courier New&amp;#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px&quot; id=&quot;codeSnippet&quot;&gt;&lt;span style=&quot;color: #0000ff&quot;&gt;protected&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;override&lt;/span&gt; &lt;span style=&quot;color: #0000ff&quot;&gt;void&lt;/span&gt; OnPaint(PaintEventArgs e)&lt;br /&gt;{&lt;br /&gt;    Point origin = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Point(200, 200);&lt;br /&gt;    CartesianCoordinates cd = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; CartesianCoordinates(e.Graphics, origin);&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;//시계의 반지름 = 50&lt;/span&gt;&lt;br /&gt;    cd.DrawCircle(&lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; Point(0, 0), 50);&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// 현재 시각을 아날로그 시계로 표현해 봐요.&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; h, m, s;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// 3시 30분 15초&lt;/span&gt;&lt;br /&gt;    h = DateTime.Now.Hour;&lt;br /&gt;    m = DateTime.Now.Minute;&lt;br /&gt;    s = DateTime.Now.Second;&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;double&lt;/span&gt; rad = 0;&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;int&lt;/span&gt; hlen, mlen, slen;&lt;br /&gt;    hlen = 30;  &lt;span style=&quot;color: #008000&quot;&gt;// 시침의 길이&lt;/span&gt;&lt;br /&gt;    mlen = 40;  &lt;span style=&quot;color: #008000&quot;&gt;// 분침의 길이&lt;/span&gt;&lt;br /&gt;    slen = 45;  &lt;span style=&quot;color: #008000&quot;&gt;// 초침의 길이&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    PointF pt = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF();&lt;br /&gt;    PointF pt2 = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF();&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// 시침 그리기&lt;/span&gt;&lt;br /&gt;    rad = GetHourRadian(h, m, s);       &lt;span style=&quot;color: #008000&quot;&gt;// 1degree = 1/360 * 2∏ = ∏/180, 1radian = ∏/180 * degrees&lt;/span&gt;&lt;br /&gt;    pt.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(hlen * Math.Cos(rad));    &lt;span style=&quot;color: #008000&quot;&gt;// cosΘ = x/r =&amp;gt; x = r * cosΘ(Θ = radian)&lt;/span&gt;&lt;br /&gt;    pt.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(hlen * Math.Sin(rad));    &lt;span style=&quot;color: #008000&quot;&gt;// sinΘ = y/r =&amp;gt; y = r * sinΘ(Θ = radian)&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;//cd.DrawLine(new PointF(0,0), pt);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    pt2 = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF();&lt;br /&gt;    pt2.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(_hImg.Size.Height * Math.Cos(rad + Math.PI / 2));&lt;br /&gt;    pt2.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(_hImg.Size.Height * Math.Sin(rad + Math.PI / 2));&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;//cd.DrawLine(new PointF(0, 0), pt);&lt;/span&gt;&lt;br /&gt;    cd.DrawImage(_hImg, &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF[] { &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF(0, 0), pt, pt2 });&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// 분침 그리기&lt;/span&gt;&lt;br /&gt;    rad = GetMinuteRadian(m, s);       &lt;span style=&quot;color: #008000&quot;&gt;// 1degree = 1/360 * 2∏ = ∏/180, 1radian = ∏/180 * degrees&lt;/span&gt;&lt;br /&gt;    pt.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(mlen * Math.Cos(rad));    &lt;span style=&quot;color: #008000&quot;&gt;// cosΘ = x/r =&amp;gt; x = r * cosΘ(Θ = radian)&lt;/span&gt;&lt;br /&gt;    pt.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(mlen * Math.Sin(rad));    &lt;span style=&quot;color: #008000&quot;&gt;// sinΘ = y/r =&amp;gt; y = r * sinΘ(Θ = radian)&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;//cd.DrawLine(new PointF(0, 0), pt);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    pt2 = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF();&lt;br /&gt;    pt2.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(_mImg.Size.Height * Math.Cos(rad + Math.PI / 2));&lt;br /&gt;    pt2.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(_mImg.Size.Height * Math.Sin(rad + Math.PI / 2));&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;//cd.DrawLine(new PointF(0, 0), pt);&lt;/span&gt;&lt;br /&gt;    cd.DrawImage(_mImg, &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF[] { &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF(0, 0), pt, pt2 });&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// 초침 그리기&lt;/span&gt;&lt;br /&gt;    rad = GetSecondRadian(s);       &lt;span style=&quot;color: #008000&quot;&gt;// 1degree = 1/360 * 2∏ = ∏/180, 1radian = ∏/180 * degrees&lt;/span&gt;&lt;br /&gt;    pt.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(slen * Math.Cos(rad));    &lt;span style=&quot;color: #008000&quot;&gt;// cosΘ = x/r =&amp;gt; x = r * cosΘ(Θ = radian)&lt;/span&gt;&lt;br /&gt;    pt.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(slen * Math.Sin(rad));    &lt;span style=&quot;color: #008000&quot;&gt;// sinΘ = y/r =&amp;gt; y = r * sinΘ(Θ = radian)&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;//cd.DrawLine(new PointF(0, 0), pt);&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// 이미지에서 왼쪽 아래 좌표 구하기&lt;/span&gt;&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;// 초침과 90도 차이가 난다.&lt;/span&gt;&lt;br /&gt;    pt2 = &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF();&lt;br /&gt;    pt2.X = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(_sImg.Size.Height * Math.Cos(rad + Math.PI / 2));&lt;br /&gt;    pt2.Y = (&lt;span style=&quot;color: #0000ff&quot;&gt;float&lt;/span&gt;)(_sImg.Size.Height * Math.Sin(rad + Math.PI / 2));&lt;br /&gt;    &lt;span style=&quot;color: #008000&quot;&gt;//cd.DrawLine(new PointF(0, 0), pt);&lt;/span&gt;&lt;br /&gt;    cd.DrawImage(_sImg, &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF[] { &lt;span style=&quot;color: #0000ff&quot;&gt;new&lt;/span&gt; PointF(0, 0), pt, pt2 });&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style=&quot;color: #0000ff&quot;&gt;base&lt;/span&gt;.OnPaint(e);&lt;br /&gt;}&lt;/pre&gt;

    &lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;</description>
			<category>C#</category>
			<author>Jeidee</author>
			<guid>http://blog.jeidee.net/816</guid>
			<comments>http://blog.jeidee.net/816#entry816comment</comments>
			<pubDate>Fri, 11 Dec 2009 18:49:17 +0900</pubDate>
		</item>
	</channel>
</rss>
