'Coding/C,C++'에 해당되는 글 2건
- 2012/10/22 복수심 가득한 프로그래머의 "신의 한 줄"
- 2011/10/11 [C/CPP] 두 직선이 교차하는 점(교점) 찾기 [Bisection method]
Posted on 2012/10/22 12:40 / Filed Under Coding/C,C++
글 주소 : http://blog.sam-chon.com/blog/32
#define if if(!
#define true false
#define false true
Wtf....
#define true (((__COUNTER__+1)%5)?true:false)
#define false (((__COUNTER__+1)%5)?false:true)
Posted on 2011/10/11 17:23 / Filed Under Coding/C,C++
글 주소 : http://blog.sam-chon.com/blog/14
조건 )
1. 직선 1 : 임의의 두 점을 잇는 직선
2. 직선 2 : 함수형태로 주어진 직선
#include <stdio.h>
double f(double x)
{
return 0.5 * x + 2.0;
}
double abs(double x)
{
if(x < 0.0) return -1.0* x;
return x;
}
typedef struct
{
double x;
double y;
} point;
void main()
{
point p1,p2;
point p_div;
double gap_1,gap_2,gap_3;
int counter = 0;
double tole = 0.0001;
p1.x = 8.0;
p1.y = 72.0;
p2.x = 1.0;
p2.y = 2.0;
printf("\n[initial value] p1.x = %.6lf, p2.x = %.6lf\n",p1.x,p2.x);
while(1)
{
counter++;
p_div.x = (p1.x + p2.x) / 2.0;
p_div.y = (p1.y + p2.y) / 2.0;
if( abs(f(p1.x) - f(p2.x) ) < tole )
{
printf("값 찾음.\n");
break;
}
gap_1 = p1.y - f(p1.x);
gap_2 = p_div.y - f(p_div.x);
gap_3 = p2.y - f(p2.x); if(gap_1 * gap_2 < 0.0)
{
p2.x = p_div.x;
p2.y = p_div.y;
}
else if(gap_2 * gap_3 < 0.0)
{
p1.x = p_div.x;
p1.y = p_div.y;
}
else
{
printf("두 점을 잇는 직선과 주어진 직선이 교차하지 않는다.\n");
break;
} printf("\np1.x = %.6lf, p2.x = %.6lf\n",p1.x,p2.x);
if(counter > 100)
{
printf("100회 안에 못 찾음.\n");
break;
}
}
printf("[결과] 교점 x = %.6lf, y = %.6lf\n",
(p1.x + p2.x) / 2.0,(p1.y + p2.y) / 2.0);
return;
}
bisection method를 이용해 100회 시도하며 오차가 0.0001 안쪽으로 들어오면 값을 찾은 것으로 간주한다.
댓글을 달아 주세요