#include <stdio.h>
#include <stdlib.h>
typedef struct Point {
int x, y;
} Point;
typedef struct Line {
Point *p1, *p2;
float slope, intercept;
char isVertical = 0;
} Line;
void calculateLine(Line* line, Point* p1, Point* p2) {
line->p1 = p1;
line->p2 = p2;
if (p1->x == p2->x) {
line->isVertical = 1;
return;
}
else if (p1->y == p2->y) {
line->slope = 0;
line->intercept = p1->y;
return;
}
else {
line->slope = (float)(p2->y - p1->y) / (float)(p2->x - p1->x);
line->intercept = (float)(p1->y) - line->slope * p1->x;
return;
}
}
void printMeetPoint(Line* line1, Line* line2) {
if (!line1->isVertical && !line2->isVertical) {
if (line1->p1->x == line2->p1->x) {
printf("직선 x가 %d에서 만납니다.\n", line1->p1->x);
}
else {
printf("직선이 평행합니다.\n");
}
}
else if (!line1->isVertical) {
float y = (float)(line2->slope * line1->p1->x + line2->intercept);
printf("직선이 (%d, %g)에서 만납니다.\n", line1->p1->x, y);
}
else if (!line2->isVertical) {
float y = (float)(line1->slope * line2->p1->x + line1->intercept);
printf("직선이 (%d, %g)에서 만납니다.\n", line2->p1->x, y);
}
else if (line1->slope == line2->slope) {
if (line1->intercept == line2->intercept) {
printf("직선이 겹친다.\n");
}
else {
printf("직선이 평행합니다\n");
}
}
else {
float x = (float)((line2->intercept - line1->intercept) / (line1->slope - line2->slope));
float y = (float)(line1->slope * x + line1->intercept);
printf("직선이 (%g, %g)에서 만납니다.\n", x, y);
}
}
int main() {
// 좌표 입력
Point p1, p2;
Point p3, p4;
printf("첫 번째 좌표를 입력해주세요 (x y): ");
scanf_s("%d %d", &p1.x, &p1.y);
printf("두 번째 좌표를 입력해주세요 (x y): ");
scanf_s("%d %d", &p2.x, &p2.y);
printf("세 번째 좌표를 입력해주세요 (x y): ");
scanf_s("%d %d", &p3.x, &p3.y);
printf("네 번째 좌표를 입력해주세요 (x y): ");
scanf_s("%d %d", &p4.x, &p4.y);
// 메모리 할당
Line *line1, *line2;
line1 = (Line*)malloc(sizeof(Line));
line2 = (Line*)malloc(sizeof(Line));
if (line1 == NULL || line2 == NULL) {
printf("Memory allocation failed.\n");
return -1;
}
// 직선 구하기
calculateLine(line1, &p1, &p2);
calculateLine(line2, &p3, &p4);
// 교점 구하기
printMeetPoint(line1, line2);
return 0;
}