fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. // 计算六边形的面积
  5. double hex_area(double X) {
  6. return (3 * sqrt(3) / 2) * X * X;
  7. }
  8.  
  9. // 计算总投影面积 A(N, Y, Z)
  10. double compute_projection_area(double N, double Y, double Z) {
  11. // 计算 X
  12. double X = (1 - N * Y) / (2 * N);
  13.  
  14. // 计算六边形的中心间距
  15. double dx = 2 * X + Y;
  16. double dy = (sqrt(3) / 2) * dx;
  17.  
  18. // 计算单个六边形的面积
  19. double A_hex = hex_area(X);
  20.  
  21. // 计算可容纳的六边形数量
  22. double Mx = floor(Z / dx) + 1; // 水平方向六边形数
  23. double My = floor(Z / dy) + 1; // 竖直方向六边形数
  24.  
  25. // 计算六边形贡献因子
  26. double gx = fmin(1, Z / dx);
  27. double gy = fmin(1, Z / dy);
  28.  
  29. // 计算最终投影面积
  30. double A_total = Mx * My * gx * gy * A_hex;
  31. return A_total;
  32. }
  33.  
  34. int main() {
  35. double N, Y, Z;
  36.  
  37. // 用户输入
  38. printf("输入 N: ");
  39. scanf("%lf", &N);
  40. printf("输入 Y: ");
  41. scanf("%lf", &Y);
  42. printf("输入 Z: ");
  43. scanf("%lf", &Z);
  44.  
  45. // 计算投影面积
  46. double result = compute_projection_area(N, Y, Z);
  47.  
  48. // 输出结果
  49. printf("六边形在 %.2lf x %.2lf 正方形上的投影面积: %.6lf\n", Z, Z, result);
  50.  
  51. return 0;
  52. }
  53.  
Success #stdin #stdout 0.01s 5252KB
stdin
Standard input is empty
stdout
输入 N: 输入 Y: 输入 Z: 六边形在 0.00 x 0.00 正方形上的投影面积: -nan