===[Biorhythm.java: 바이오 리듬을 계산하는 클래스]=====================
/**
* 바이오 리듬관련 클레스
*
* pi = 원주율
* 1. 신체 리듬 : sin( (살아온 날수 / 23) *2 *pi)*100)
* 2. 감성 리듬 : sin( (살아온 날수 / 28) *2 *pi)*100)
* 3. 지성 리듬 : sin( (살아온 날수 / 33) *2 *pi)*100)
* 4. 직감(육감) 리듬 : sin( (살아온 날수 / 38) *2 *pi)*100)
* 5. 미적 감각 리듬 : sin( (살아온 날수 / 43) *2 *pi)*100)
* 6. 자각 상태 리듬 : sin( (살아온 날수 / 48) *2 *pi)*100)
* 7. 영적 감각 리듬 : sin( (살아온 날수 / 53) *2 *pi)*100)
*/
class Biorhythm
{
final static private int PHYSICAL = 0; // 신체리듬
final static private int SENSITIVITY = 1; // 감성 리듬
final static private int INTELLECTUAL = 2; // 지성 리듬
final static private int INTUITION = 3; // 직감 리듬
final static private int AESTHETIC = 4; // 미적감각 리듬
final static private int SELF_AWARENESS = 5; // 자각상태 리듬
final static private int SPIRITUAL = 6; // 영적감각 리듬
private double bioCicle[];
// 바이오 리듬 관련 주기 이곳을 int로 할경우 계산시 (double)로 형변환 해야함
private double pi; // 원 주율
Biorhythm()
{
bioCicle = new double[] {23,28,33,38,43,48,53};
pi = 3.141592654;
}
// 바이오 리듬을 계산하는 루틴
public int getBiorhythm(int type,int totDay)
{
return (int) (Math.sin(((totDay/bioCicle[type])*2)*pi)*100);
}
public static void main(String args[])
{
UserDate ud = new UserDate();
Biorhythm br = new Biorhythm();
ud.putStartDate(1982,7,4); // 생년 월일 입력
ud.putEndDay(2007,3,4); // 보고 싶은 날짜 입력
ud.calculateTotDay(); // 살아온 총날수를 계산
System.out.println(" 살아온 날 수 : "+ud.getTotDay());
System.out.println(" 신 체 리 듬 : "+ br.getBiorhythm(PHYSICAL,ud.getTotDay()));
System.out.println(" 감 성 리 듬 : "+ br.getBiorhythm(SENSITIVITY,ud.getTotDay()));
System.out.println(" 지 성 리 듬 : "+ br.getBiorhythm(INTELLECTUAL,ud.getTotDay()));
System.out.println(" 직 감 리 듬 : "+ br.getBiorhythm(INTUITION,ud.getTotDay()));
System.out.println(" 미적감각 리듬 : "+ br.getBiorhythm(AESTHETIC,ud.getTotDay()));
System.out.println(" 자각상태 리듬 : "+ br.getBiorhythm(SELF_AWARENESS,ud.getTotDay()));
System.out.println(" 영적감각 리듬 : "+ br.getBiorhythm(SPIRITUAL,ud.getTotDay()));
}
}
===[UserDate.java : 살아온 총 날수를 계산 해주는 클래스]=========================
import java.util.*;
class UserDate
{
private int endDayOfMonth[];
//당해 년도의 날짜를 구하기 위해 달의 최종 날짜를 저장 하는 배열
private int startYear,startMonth,startDay; // 시작 날짜 (생년월일)
private int endYear,endMonth,endDay; // 종료 날짜(알아 복고 싶은 날짜)
private int totDay; // 총 날짜
UserDate()
{
endDayOfMonth = new int[] {31,28,31,30,31,30,31,31,30,31,30,31};
}
public void putStartDate(int year, int month, int day)
{
this.startYear=year;
this.startMonth=month;
this.startDay=day;
}
public void putEndDay(int year, int month, int day)
{
this.endYear=year;
this.endMonth=month;
this.endDay=day;
}
public void calculateTotDay()
{
totDay=(endYear-startYear)*365;
// 시작년도 에서 사이년도 * 365를 곱해 날수를 먼저 구한다.
// 윤년의 조건을 만족하는 날짜를 더하거나 뺀다.
// 윤년의 조건 4년 마다 100의 배수가 아닌 해이며, 400의 배수가 되는 해는 윤년이다.
totDay+=(int)(endYear/4)-(int)(startYear/4);
totDay-=(int)(endYear/100)-(int)(startYear/100);
totDay+=(int)(endYear/400)-(int)(startYear/400);
//위의 네 문장을 하나로 써도 무방함.
// 시작년도의 1월 1일 에서 현제 까지 날짜는 빼는 루틴
procLeapYear(startYear);
for(int i=0; i < (startMonth-1); i++)
{
totDay-=endDayOfMonth[i];
}
totDay-=startDay;
// 마지막 년도의 날짜의 총합
procLeapYear(endYear);
for(int i=0; i < (endMonth-1); i++)
{
totDay+=endDayOfMonth[i];
}
totDay+=endDay;
}
// 윤년일 경우 2월의 총날수를 29일로 윤년이 아닐경우 28일로 변환
private void procLeapYear(int year)
{
GregorianCalendar gc = new GregorianCalendar();
if(gc.isLeapYear(year))
{
endDayOfMonth[1]=29;
}
else
{
endDayOfMonth[1]=28;
}
}
public int getTotDay()
{
return totDay;
}
}
우리의 몸 안에 내재된 잠재적 에너지는 발산을 위한 활성기와 충전을 위한 침체기,
그리고 활성과 침제가 상호 교차하는 지점에서 에너지의 기류가 위험해질 수 있는 전환기를
반복한다. 이런 에너지들의 유형을 신체, 감성, 지성 이렇게 세 가지로 분류해서 각각 23일,
28일, 33일을 주기로 에너지의 파동을 만들어 간다는 학설을 바이오리듬이라 한다.
그러나 최근에는 바이오리듬의 다양한 연구 결과로 또 다른 4개의 리듬이 주요 3개 리듬과
함께 연구되고 있다. 38일주기의 직감(육감) 리듬, 43일주기의 미적 감각 리듬, 48일 주기의
자각 상태 리듬 , 53일 주기의 영적 감각 리듬, 이렇게 4개의 리듬을 말한다.
바이오리듬은 주요 3개 리듬과 보조 4개 리듬 모두 7개의 리듬 주기가 출생을 시작으로
동시에 출발하여 각자 다른 순환 주기로 상승과 하강을 반복하면서 여러 유형의 잠재적
에너지의 상태를 보여주는 인간의 생체 에너지와 정신 에너지의 흐름표다.
자~ 이것이 바이오 리듬 바이오 리듬이 뭔지 알았으니
이젠 프로그램으로 구현을 해봐야겠지요
1. 바이오 리듬 구하는 방법
구할 사람의 생 년월일을 입력받아 현재까지 살아온 날수를 구한다.
특정일 인경우는 생년월일 ~ 특정일 까지의 날수를 구하면 된다.
2. 신체 리듬 : sin( (살아온 날수 / 23) *2 *pi)*100
pi = 원주율이니 알아서 처리하3 --> 3.14~~~~~~~~
3. 감성 리듬 : sin( (살아온 날수 / 28) *2 *pi)*100
4. 지성 리듬 : sin( (살아온 날수 / 33) *2 *pi)*100
5. 직감(육감) 리듬 : sin( (살아온 날수 / 38) *2 *pi)*100
6. 미적 감각 리듬 : sin( (살아온 날수 / 43) *2 *pi)*100
7. 자각 상태 리듬 : sin( (살아온 날수 / 48) *2 *pi)*100
8. 영적 감각 리듬 : sin( (살아온 날수 / 53) *2 *pi)*100
그래프의 경우 sin곡선을 그리면 된다. 별거 있나... ㅋㅋㅋㅋㅋ
9. 결과 값
'+'--> 고조기, '-' --> 저조기, 0 --> 위기일
+100 인 경우 최 고조기
-100 인 경우 최 저조기가 된다.
0 일 경우 가장 않좋은 날이라고 하네요
이것을 바탕으로 한번 짜보시길 바랍니다~ㅋ
'IT_Programming > Java' 카테고리의 다른 글
Generics (0) | 2007.03.12 |
---|---|
[펌] "시작하는 JAVA프로그래머를 위해" URL 리스트 (0) | 2007.03.07 |
for문 장난질~ (문제 해결력 테스트) (0) | 2007.03.04 |
[펌] 필수 자바 라이브러리들 (0) | 2007.02.15 |
Effective JAVA™ Programming Language Guide - 2 (0) | 2007.02.15 |