fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. // 構造体の定義
  5. typedef struct {
  6. int x;
  7. int y;
  8. } Point;
  9.  
  10. // 点Aと線分BCの最短距離を計算する関数
  11. double distance(Point A, Point B, Point C) {
  12. // 線分BCのベクトル
  13. double AB_x = C.x - B.x;
  14. double AB_y = C.y - B.y;
  15.  
  16. // ベクトルの長さ
  17. double AB_length = sqrt(AB_x * AB_x + AB_y * AB_y);
  18.  
  19. // 点Aから線分BCの最近接点までのベクトル
  20. double AP_x = A.x - B.x;
  21. double AP_y = A.y - B.y;
  22.  
  23. // 線分BCに垂直な距離を計算
  24. double area = fabs(AB_x * AP_y - AB_y * AP_x);
  25. double distance = area / AB_length;
  26.  
  27. return distance;
  28. }
  29.  
  30. int main() {
  31. Point A, B, C;
  32.  
  33. // ユーザーからの入力を受け取る
  34. printf("点Aの座標 (x y): ");
  35. scanf("%d %d", &A.x, &A.y);
  36.  
  37. printf("点Bの座標 (x y): ");
  38. scanf("%d %d", &B.x, &B.y);
  39.  
  40. printf("点Cの座標 (x y): ");
  41. scanf("%d %d", &C.x, &C.y);
  42.  
  43. // 最短距離を計算
  44. double min_distance = distance(A, B, C);
  45.  
  46. // 結果を表示
  47. printf("点Aと線分BCの最短距離: %.6f\n", min_distance);
  48.  
  49. return 0;
  50. }
  51.  
  52.  
  53.  
Success #stdin #stdout 0s 5284KB
stdin
Standard input is empty
stdout
点Aの座標 (x y): 点Bの座標 (x y): 点Cの座標 (x y): 点Aと線分BCの最短距離: 0.017101