fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct triangle {
  5. double p1[2];
  6. double p2[2];
  7. double p3[2];
  8. };
  9.  
  10. int congruence (struct triangle *, struct triangle *);
  11. int congruence (struct triangle *a, struct triangle *b)
  12. {
  13. double w[2][3],t;
  14. int i,j,k;
  15.  
  16. /* 各辺の長さの2乗を計算 */
  17. t=a->p1[0]-a->p2[0];
  18. w[0][0]=t*t;
  19. t=a->p1[1]-a->p2[1];
  20. w[0][0]+=t*t;
  21.  
  22. t=a->p2[0]-a->p3[0];
  23. w[0][1]=t*t;
  24. t=a->p2[1]-a->p3[1];
  25. w[0][1]+=t*t;
  26.  
  27. t=a->p3[0]-a->p1[0];
  28. w[0][2]=t*t;
  29. t=a->p3[1]-a->p1[1];
  30. w[0][2]+=t*t;
  31.  
  32. t=b->p1[0]-b->p2[0];
  33. w[1][0]=t*t;
  34. t=b->p1[1]-b->p2[1];
  35. w[1][0]+=t*t;
  36.  
  37. t=b->p2[0]-b->p3[0];
  38. w[1][1]=t*t;
  39. t=b->p2[1]-b->p3[1];
  40. w[1][1]+=t*t;
  41.  
  42. t=b->p3[0]-b->p1[0];
  43. w[1][2]=t*t;
  44. t=b->p3[1]-b->p1[1];
  45. w[1][2]+=t*t;
  46.  
  47. /* sort */
  48. for(k=0; k<2; k++) {
  49. for(i=1; i<3; i++) {
  50. for(j=0; j<i; j++) {
  51. if(w[k][j]>w[k][i]) {
  52. t=w[k][i];
  53. w[k][i]=w[k][j];
  54. w[k][j]=t;
  55. }
  56. }
  57. }
  58. }
  59.  
  60. /* 一致すれば合同 */
  61. return ((w[0][0]==w[1][0])&&
  62. (w[0][1]==w[1][1])&&
  63. (w[0][2]==w[1][2])
  64. );
  65.  
  66. }
  67.  
  68. int main()
  69. {
  70. struct triangle a,b;
  71.  
  72. a.p1[0]=0;
  73. a.p1[1]=0;
  74. a.p2[0]=0;
  75. a.p2[1]=3.6;
  76. a.p3[0]=4.7;
  77. a.p3[1]=0;
  78.  
  79. b.p1[0]=2.1;
  80. b.p1[1]=3.2;
  81. b.p2[0]=2.1;
  82. b.p2[1]=7.9;
  83. b.p3[0]=5.7;
  84. b.p3[1]=3.2;
  85.  
  86. printf("input a = ");
  87. printf("(%g, %g), ", a.p1[0],a.p1[1]);
  88. printf("(%g, %g), ", a.p2[0],a.p2[1]);
  89. printf("(%g, %g)\n",a.p3[0],a.p3[1]);
  90. printf("input b = ");
  91. printf("(%g, %g), ", b.p1[0],b.p1[1]);
  92. printf("(%g, %g), ", b.p2[0],b.p2[1]);
  93. printf("(%g, %g)\n",b.p3[0],b.p3[1]);
  94. if(congruence(&a,&b))
  95. printf("合同です\n");
  96. else
  97. printf("合同ではありません\n");
  98.  
  99. a.p1[0]=0;
  100. a.p1[1]=0;
  101. a.p2[0]=0;
  102. a.p2[1]=3;
  103. a.p3[0]=4;
  104. a.p3[1]=0;
  105.  
  106. b.p1[0]=0;
  107. b.p1[1]=0;
  108. b.p2[0]=0;
  109. b.p2[1]=6;
  110. b.p3[0]=8;
  111. b.p3[1]=0;
  112.  
  113. printf("input a = ");
  114. printf("(%g, %g), ", a.p1[0],a.p1[1]);
  115. printf("(%g, %g), ", a.p2[0],a.p2[1]);
  116. printf("(%g, %g)\n",a.p3[0],a.p3[1]);
  117. printf("input b = ");
  118. printf("(%g, %g), ", b.p1[0],b.p1[1]);
  119. printf("(%g, %g), ", b.p2[0],b.p2[1]);
  120. printf("(%g, %g)\n",b.p3[0],b.p3[1]);
  121. if(congruence(&a,&b))
  122. printf("合同です\n");
  123. else
  124. printf("合同ではありません\n");
  125.  
  126. return 0;
  127. }
Success #stdin #stdout 0.02s 1676KB
stdin
Standard input is empty
stdout
input a = (0, 0), (0, 3.6), (4.7, 0)
input b = (2.1, 3.2), (2.1, 7.9), (5.7, 3.2)
合同です
input a = (0, 0), (0, 3), (4, 0)
input b = (0, 0), (0, 6), (8, 0)
合同ではありません