2024. 11. 18. 18:53ㆍCoding
알고리즘 계획(c,c++)
1. 두 천체의 이름, 절대등급(M), 겉보기 등급(m), 거리(pc) 입력 받기 (서로 비교도 할거임, double입력)
1.1 - 겉보기 등급알고 싶으면, 절대등급 알고 싶으면 절대등급 공란, 지구와의 거리 알고싶으면 거리 공란
1.2 - 만약 2개 이상 입력 안되면 다시 입력하라고 하기
1.4 - 1AU, pc, 광년 단위 통일시키기 위해 알려주기 주로 pc로 통일 (1pc = 3.262광년 = 206,265 AU )
1.5 - '약' 붙이기
2. 등급, 거리 입력 바탕으로
2.1 - 지구와 별 사이 거리(pc, 광년 둘다 표기 1pc 약 3.262광년)
2.2 - 거리지수 (0보다 크면 10파섹보다 멀리 있다는 것 명시)
2.3 - 절대 등급, 상대 등급 구하기
2.4 ----------------------------------------------------------- 여기까지 다 구하면 이제 2개의 천체 비교
2.5 - 지구에서 보이는 광도 비교
2.6 - 실제 광도 비교
3. 아래 표(겉보기 등급 리스트)의 예시들 입력해보기
3.1 - 절대 등급이 없는데? : 태양 빛에 의존하는 천체라서 그럼. 10pc 밖으로 나가면 보이지도 않는다
혹은 너무 밝거나, 너무 희미하거나, 너무 변동성이 많거나
3.2 - 겉보기 등급이 없는데? : 조건에 따라 바뀌거나 블랙홀, 은하같이 일정한 광원이라기보다 확산된 천체
3.3 - 이렇게 하나씩 삐꾸나있어서 거리 - 절대 - 겉보기 중 2개를 입력할 수 있도록 설계
3.4 - 겉보기 등급도 모르는데 그럼 거리는 어케 앎? : 니가 가정해서 설정해야지;;










4. 사용 공식




5. 코드
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
struct Star {
string name;
double M; // 절대등급
double m; // 겉보기 등급
double d; // 거리 (pc 단위)
};
// 거리 계산 함수
double calD(double m, double M) {
return pow(10, (m - M) / 5 + 1);
}
// 절대등급 계산 함수
double calAbM(double m, double d) {
return m - 5 * (log10(d) - 1);
}
// 겉보기 등급 계산 함수
double calApM(double M, double d) {
return M + 5 * (log10(d) - 1);
}
// 광도 비교 함수
double compareLum(double mag1, double mag2) {
return pow(10, (mag2 - mag1) / 2.5);
}
int main() {
Star star1, star2;
// 사용자 입력
cout << "첫 번째 천체 이름: ";
cin >> star1.name;
cout << "절대등급(M), 겉보기 등급(m), 거리(pc)를 입력 (비어있는 값은 -1로 입력): ";
cin >> star1.M >> star1.m >> star1.d;
cout << "두 번째 천체 이름: ";
cin >> star2.name;
cout << "절대등급(M), 겉보기 등급(m), 거리(pc)를 입력 (비어있는 값은 -1로 입력): ";
cin >> star2.M >> star2.m >> star2.d;
// 거리 계산
if (star1.d == -1) star1.d = calD(star1.m, star1.M);
if (star2.d == -1) star2.d = calD(star2.m, star2.M);
// 절대등급 계산
if (star1.M == -1) star1.M = calAbM(star1.m, star1.d);
if (star2.M == -1) star2.M = calAbM(star2.m, star2.d);
// 겉보기 등급 계산
if (star1.m == -1) star1.m = calApM(star1.M, star1.d);
if (star2.m == -1) star2.m = calApM(star2.M, star2.d);
// 출력
cout << fixed << setprecision(2);
cout << "\n=== 천체 정보 비교 ===\n\n";
cout << star1.name << ": 거리 = 약 " << star1.d << " pc, " << star1.d * 3.262 << " 광년, " << star1.d * 206265 << " AU (지구와 태양 사이 거리), " << "절대등급 = " << star1.M
<< ", 겉보기 등급 = " << star1.m << endl;
cout << star2.name << ": 거리 = 약 " << star2.d << " pc, " << star2.d * 3.262 << " 광년, " << star2.d * 206265 << " AU (지구와 태양 사이 거리), " << "절대등급 = " << star2.M
<< ", 겉보기 등급 = " << star2.m << endl;
// 광도 비교
double apparentRatio = compareLum(star1.m, star2.m);
double absoluteRatio = compareLum(star1.M, star2.M);
cout << "\n광도 비교 (지구에서 보이는 광도): " << star1.name << "이(가) " << star2.name << "보다 " << apparentRatio << " 배 밝음" << endl;
cout << "광도 비교 (10pc 거리에서 보는 광도): " << star1.name << "이(가) " << star2.name << "보다 " << absoluteRatio << " 배 밝음" << endl;
return 0;
}


'Coding' 카테고리의 다른 글
| <한빛나래 탐구활동> 유전 표현형, 유전자형 확률 계산 알고리즘 (0) | 2024.11.10 |
|---|---|
| <Satellite> : Help (+ 제작 과정) (0) | 2024.08.21 |
| 콜라츠 수열과 파이썬으로 제작한 수열 배틀 게임 (0) | 2024.05.20 |