본문 바로가기
C/C언어 코딩도장

UNIT 50 두 점 사이의 거리 구하기

by yeong1225 2022. 3. 10.

https://dojang.io/mod/page/view.php?id=799

 

C 언어 코딩 도장: 핵심 정리

typedef로 자료형의 별칭 정의하기 typedef를 사용하면 구조체를 포함하여 모든 자료형의 별칭을 정의할 수 있습니다. typedef 자료형 별칭; // 자료형의 별칭 정의 typedef 자료형* 별칭; // 자료형 포인

dojang.io

 

50.1 두 점 사이의 거리 구하기

구조체를 활용하여 2차원 평면에서 위치를 표현한 뒤 두점 사이의 거리를 구하기.

2차원 평면에서 위치를 표현하려면 x와 y값이 필요.

struct Point2D{
	int x;
    int y;
};

이제 구조체로 변수 두개를 선언하여 점 두 개를 표현

#include <stdio.h>

struct Point2D {
	int x;
	int y;
};

int main()
{
	struct Point2D p1; //점1
	struct Point2D p2; //점2

	//점1 위치
	p1.x = 30;
	p1.y = 20;

	//점 2 위치
	p2.x = 60;
	p2.y = 50;

	printf("p1 : %d %d\n", p1.x, p1.y); //30 20
	printf("p2 : %d %d\n", p2.x, p2.y); //60 50

	return 0;
}

int a = p2.x - p1.x; //선 a의 길이
int b = p2.y - p1.y; //선 b의 길이

루트는 C언어에서 제공하는 sqrt 함수를 사용하면 됨. sqrt는 제곱근을 뜻하는 square root에서 따왔으며, math.h 헤더 파일에 선언되어 있음.

sqrt(값);

#include <stdio.h>
#include <math.h> //sqrt가 선언된 헤더파일
struct Point2D {
	int x;
	int y;
};

int main()
{
	struct Point2D p1; //점1
	struct Point2D p2; //점2

	//점1 위치
	p1.x = 30;
	p1.y = 20;

	//점 2 위치
	p2.x = 60;
	p2.y = 50;

	int a = p2.x - p1.x; //선 a의 길이
	int b = p2.y - p1.y; //선 b의 길이

	double c = sqrt((a * a) + (b * b));
	//제곱근은 소수로 나오므로 double형 변수에 저장

	printf("%f\n", c); //42.426407

	return 0;
}

거듭제곱(power)을 구하는 pow함수를 사용해도 됨. (math.h).

pow(값, 지수);

double c = sqrt(pow(a,2) + pow(b,2));

선의 위치를 구할 때 p1에서 p2를 빼도 괜찮음.

int a = p1.x - p2.x; //선 a의 길이
int b = p1.y - p2.y; //선 b의 길이

제곱을 할 것이기에 부호는 상관없기 때문.

 

참고) 절댓값 함수

abs, fabs, fabsf 함수를 사용하면 양수 또는 음수를 절댓값(absolute value)으로 만들 수 있습니다. 이 함수도 math.h 헤더 파일에 선언되어 있습니다.

  • abs(정수);
  • fabs(double형 실수);
  • fabsf(float형 실수);