12주차 - Donghwanteam/C2-10 GitHub Wiki

과제

직선 구하기

#include <stdio.h>

+ // 점 구조체 정의
typedef struct {
    int x;
    int y;
} Point;

+ // 두 점을 포인터로 저장
typedef struct {
    Point* p1;
    Point* p2;
} Line;

+ // 첫번째직선 만드는 함수
void MakeLine1(Line* line, Point* a, Point* b) {
    line->p1 = a;
    line->p2 = b;
}

+ // 직선에 포함된 점 2개를 출력하는 함수
void PrintLine(Line* line) {
    printf("직선은 점 (%d, %d)와 (%d, %d)를 지나요 :D\n",
        line->p1->x, line->p1->y,
        line->p2->x, line->p2->y);
}

+ // 메인 함수
int main() {
    // 점 2개 선언
    Point p1 = {2, 3};
    Point p2 = {4, 5};

+     // 직선 선언
    Line line;

+     // MakeLine1 함수로 직선 생성
    MakeLine1(&line, &p1, &p2);

+     // 직선 확인 출력
    PrintLine(&line);

    return 0;
}

교점 구하기

#include <stdio.h>

+ // 점 구조체
typedef struct {
    int x;
    int y;
} Point;

+ // 직선 구조체
typedef struct {
    Point* p1;
    Point* p2;
} Line;

+ // 직선 만들기
void MakeLine1(Line* line, Point* a, Point* b) {
    line->p1 = a;
    line->p2 = b;
}

+ // 직선 출력
void PrintLine(Line* line) {
    printf("직선은 점 (%d, %d)와 (%d, %d)를 지나요 :D\n",
        line->p1->x, line->p1->y,
        line->p2->x, line->p2->y);
}

+ // 교점 구하는 함수
int FindIntersection(Line* l1, Line* l2, double* x, double* y) {
+     // 첫 번째 직선
    int x1 = l1->p1->x, y1 = l1->p1->y;
    int x2 = l1->p2->x, y2 = l1->p2->y;

+     // 두 번째 직선
    int x3 = l2->p1->x, y3 = l2->p1->y;
    int x4 = l2->p2->x, y4 = l2->p2->y;

+     // 각 직선의 계수
    int A1 = y1 - y2;
    int B1 = x2 - x1;
    int C1 = x1 * y2 - x2 * y1;

    int A2 = y3 - y4;
    int B2 = x4 - x3;
    int C2 = x3 * y4 - x4 * y3;

    int denom = A1 * B2 - A2 * B1;

    if (denom == 0) {
        // 평행하거나 일치함
        return 0;
    }

    *x = (double)(B1 * C2 - B2 * C1) / denom;
    *y = (double)(C1 * A2 - C2 * A1) / denom;

    return 1;
}

+ // 메인 함수
int main() {
    Point p1 = {1, 1};
    Point p2 = {4, 4};

    Point p3 = {1, 5};
    Point p4 = {4, 2};

    Line l1, l2;
    MakeLine1(&l1, &p1, &p2);
    MakeLine1(&l2, &p3, &p4);

    PrintLine(&l1);
    PrintLine(&l2);

    double ix, iy;
    if (FindIntersection(&l1, &l2, &ix, &iy)) {
        printf("교점은 (%.2f, %.2f)입니다!\n", ix, iy);
    } else {
        printf("두 직선은 평행하거나 일치해요ㅠㅠ\n");
    }

    return 0;
}

교점 구하기 + @

두개의 일차함수가 있을 경우 두 일차함수의 교점을 구할 수 있는 코드

#include <stdio.h>

int main() {
    double a1, b1, a2, b2;
+     // 첫번째일차함수: y = a1*x + b1
+     // 두번째일차함수: y = a2*x + b2

    printf("첫 번째 일차함수의 계수 a1, b1 입력(y = a1*x + b1): ");
    scanf("%lf %lf", &a1, &b1);

    printf("두 번째 일차함수의 계수 a2, b2 입력(y = a2*x + b2): ");
    scanf("%lf %lf", &a2, &b2);

    if (a1 == a2) {
        if (b1 == b2) {
            printf("두 함수는 같은 직선입니다 (무한한 교점)\n");
        }
        else {
            printf("두 함수는 평행하여 교점이 없습니다 :/\n");
        }
    }
    else {
        double x = (b2 - b1) / (a1 - a2);
        double y = a1 * x + b1;
        printf("교점 좌표: (%.5f, %.5f)\n", x, y);
    }

    return 0;
}
⚠️ **GitHub.com Fallback** ⚠️