두 직선의 교점 구하기(202510082한성태) - aksrud/3kingOfGod GitHub Wiki

#include <stdio.h> #include <stdlib.h>

typedef struct { int x, y; } Point;

typedef struct { Point *p1, *p2; float slope; float intercept; char isVertical; } Line;

void calculateLine(Line *line, Point *p1, Point *p2) { line->p1 = p1; line->p2 = p2;

if (p1->x == p2->x) {
    line->isVertical = 1;
    return;
}

line->isVertical = 0;
line->slope = (float)(p2->y - p1->y) / (float)(p2->x - p1->x);
line->intercept = p1->y - line->slope * p1->x;

}

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"); } return; }

if (line1->isVertical) {
    float y = line2->slope * line1->p1->x + line2->intercept;
    printf("교점: (%d, %g)\n", line1->p1->x, y);
    return;
}

if (line2->isVertical) {
    float y = line1->slope * line2->p1->x + line1->intercept;
    printf("교점: (%d, %g)\n", line2->p1->x, y);
    return;
}

if (line1->slope == line2->slope) {
    if (line1->intercept == line2->intercept) {
        printf("직선이 겹칩니다.\n");
    } else {
        printf("직선이 평행합니다.\n");
    }
    return;
}

float x = (line2->intercept - line1->intercept) / (line1->slope - line2->slope);
float y = line1->slope * x + line1->intercept;
printf("교점: (%g, %g)\n", x, y);

}

int main() { Point p1, p2, p3, p4;

printf("첫 번째 좌표 (x y): ");
scanf("%d %d", &p1.x, &p1.y);

printf("두 번째 좌표 (x y): ");
scanf("%d %d", &p2.x, &p2.y);

printf("세 번째 좌표 (x y): ");
scanf("%d %d", &p3.x, &p3.y);

printf("네 번째 좌표 (x y): ");
scanf("%d %d", &p4.x, &p4.y);

Line *line1 = malloc(sizeof(Line));
Line *line2 = malloc(sizeof(Line));

if (!line1 || !line2) {
    printf("메모리 할당 실패\n");
    return 1;
}

calculateLine(line1, &p1, &p2);
calculateLine(line2, &p3, &p4);

printMeetPoint(line1, line2);

free(line1);
free(line2);

return 0;

}

⚠️ **GitHub.com Fallback** ⚠️