找回密码
 立即注册
查看: 380|回复: 0

Scala 学习笔记(6)-程序例子Scala Keams聚类算法

[复制链接]
发表于 2022-4-15 16:46 | 显示全部楼层 |阅读模式
之前Java写的一个Keams算法,想通过写这个例子试试手,总结下来就是对Scala 还是不是很熟悉,还需要慢慢加强。对于Scala中List ,数组,Map等集合还需深入了解

Scala中foreach 用起来还是比较方便的,对于定义数据类型也比较方法相比java简单
for 循环中遇到一个开闭区间的问题,下面代码中 until 是不包括值为D_LEN的,如果是换成 to 是包含 D_LEN值的 ,这点是需要注意的地方
  1.         for (i <- 0 until D_LEN) {
  2.           t(i) = add(t(i), list.point(i))
  3.         }
复制代码
下面是Scala Keams程序

清单1.
  1. package com.test.zhuoer
  2. /**
  3. * *
  4. * Keams聚类用到的实体类
  5. *
  6. * ?这个类的构造函数,如果参数多了怎么办?
  7. *
  8. */
  9. class KEntity(pointArg: Array[Double], attrStrArg: String, idArg: Int) {
  10.   var point = pointArg;
  11.   var attrStr = attrStrArg // 属性字符串
  12.   var id = idArg //ID
  13. }
复制代码
清单2.
  1. package com.test.zhuoer
  2. import scala.util.control.Breaks._
  3. object Keams {
  4.   var K = 3 //簇大小
  5.   var initCluster = Map[Int, Array[Double]]() // 聚类中心
  6.   var datasource = List[KEntity]() //数据源
  7.   var D_LEN = 4; //数据维度
  8.   var k_Cluster = Map[Int, List[KEntity]]() //用来分类的数据Map
  9.   var ctDistance = new Array[Double](K) //每次迭代聚类中心点
  10.   var DISTANCE = 0d //精度控制
  11.   /**
  12.    * *
  13.    * 初始化方法
  14.    */
  15.   def init = {
  16.     var set = Set[Int]() //去重聚类点
  17.     var index_k = 0
  18.     while (initCluster.size != K) {
  19.       var t = scala.util.Random.nextInt(datasource.size)
  20.       if (!set.contains(t)) {
  21.         set += t;
  22.         initCluster += (index_k -> datasource(index_k).point) //初始聚类点
  23.         k_Cluster += (index_k -> List()) //初始聚类数据
  24.         ctDistance(index_k) = -1 //设置聚类点距离
  25.         index_k = index_k + 1
  26.       }
  27.     }
  28.   }
  29.   /**
  30.    * *
  31.    * 初始聚类Map数据
  32.    */
  33.   def initKCluster {
  34.     k_Cluster = Map[Int, List[KEntity]]()
  35.     for (i <- 0 until K) {
  36.       k_Cluster += (i -> List()) //初始聚类数据
  37.     }
  38.   }
  39.   /**
  40.    * *
  41.    * 加法
  42.    */
  43.   def add(d1: Double, d2: Double): Double =
  44.     d1 + d2
  45.   /**
  46.    * *
  47.    * 减法
  48.    */
  49.   def sub(d1: Double, d2: Double): Double =
  50.     d1 - d2
  51.   /**
  52.    * *
  53.    * 乘法
  54.    */
  55.   def mul(d1: Double, d2: Double): Double =
  56.     d1 * d2
  57.   /**
  58.    * *
  59.    * 除法
  60.    */
  61.   def div(d1: Double, d2: Double): Double =
  62.     d1 / d2
  63.   /**
  64.    * *
  65.    * 两点之间欧氏距离
  66.    */
  67.   def distance(d1: Array[Double], d2: Array[Double]): Double = {
  68.     var sum = 0d
  69.     if (d1.length == d2.length && d1.length == D_LEN) {
  70.       for (i <- 0 until D_LEN) {
  71.         sum += Math.pow(sub(d1(i), d2(i)), 2)
  72.       }
  73.     }
  74.     Math.sqrt(sum);
  75.   }
  76.   /**
  77.    * *
  78.    * 重新计算每个类别下面的点与对应聚类中心的距离
  79.    */
  80.   def newCenter() = {
  81.     k_Cluster.foreach(cluster => {
  82.       var t = new Array[Double](D_LEN)
  83.       var list = cluster._2
  84.       list.foreach(list => {
  85.         for (i <- 0 until D_LEN) {
  86.           t(i) = add(t(i), list.point(i))
  87.         }
  88.       })
  89.       var ncc = new Array[Double](D_LEN)
  90.       for (i <- 0 until ncc.length) {
  91.         ncc(i) = div(t(i), cluster._2.size)
  92.       }
  93.       ctDistance(cluster._1) = distance(initCluster(cluster._1), ncc)
  94.       initCluster += (cluster._1 -> ncc)
  95.     })
  96.   }
  97.   /**
  98.    * *
  99.    * 迭代方法重新将数据分类
  100.    */
  101.   def order() {
  102.     initKCluster
  103.     for (i <- 0 until datasource.size) {
  104.       var tempDistance = 99999999999d
  105.       var cluster = 0
  106.       for (j <- 0 until K) {
  107.         var min_cluster = distance(datasource(i).point, initCluster(j));
  108.         if (min_cluster < tempDistance) {
  109.           tempDistance = min_cluster;
  110.           cluster = j;
  111.         }
  112.       }
  113.       k_Cluster += (cluster -> (k_Cluster(cluster) ::: List(datasource(i))))
  114.     }
  115.   }
  116.   /**
  117.    * *
  118.    * 执行聚类
  119.    */
  120.   def exec = {
  121.     breakable {
  122.       var c = 0
  123.       do {
  124.         order // 迭代方法重新将数据分类
  125.         // 重新计算的聚类中心相互之间距离小于精度值,停止迭代
  126.         var t = 0;
  127.         ctDistance.foreach(d => {
  128.           if (DISTANCE == d)
  129.             t = t + 1
  130.         })
  131.         if (t != K)
  132.           newCenter // 重新计算每个类别下面的点与对应聚类中心的距离
  133.         else
  134.           break
  135.         println("--------------迭代次数:" + c)
  136.         c = c + 1
  137.       } while (true)
  138.     }
  139.   }
  140.   def main(args: Array[String]): Unit = {
  141.     println("-------------Start")
  142.     //准备数据
  143.     var d: Array[Array[Double]] = Array(
  144.       Array(6, 12, 8929, 1474),
  145.       Array(7, 12, 9149, 9952),
  146.       Array(4, 12, 3992, 5822),
  147.       Array(3, 12, 1626, 360),
  148.       Array(32, 12, 3563, 39630),
  149.       Array(38, 12, 303451, 34083239),
  150.       Array(66, 12, 133102, 6468),
  151.       Array(14, 12, 38860, 15140),
  152.       Array(128, 72, 271390, 39019349),
  153.       Array(111, 12, 0, 0),
  154.       Array(61, 12, 18626, 664),
  155.       Array(40, 12, 3626, 660),
  156.       Array(63, 42, 2290136, 3419991),
  157.       Array(1, 12, 0, 14000),
  158.       Array(5, 12, 5723, 998),
  159.       Array(6, 12, 9032, 1512),
  160.       Array(102, 72, 20134467, 25894663),
  161.       Array(5, 12, 5723, 5998),
  162.       Array(101, 72, 621319, 15322448),
  163.       Array(6, 12, 9095, 1542),
  164.       Array(6, 12, 9095, 1542),
  165.       Array(6, 12, 9095, 1542),
  166.       Array(6, 12, 9095, 1542),
  167.       Array(6, 12, 9095, 1542),
  168.       Array(4, 12, 3626, 660),
  169.       Array(6, 12, 9095, 1542),
  170.       Array(3, 12, 1626, 360),
  171.       Array(2, 12, 500, 19100),
  172.       Array(100, 12, 15420, 8208707),
  173.       Array(100, 12, 8927659, 38163823),
  174.       Array(11, 12, 7708, 5546),
  175.       Array(6, 12, 8849, 33459849),
  176.       Array(4, 12, 3626, 89160),
  177.       Array(14, 12, 38860, 14140),
  178.       Array(1, 12, 0, 79000),
  179.       Array(30, 12, 225482, 90391),
  180.       Array(31, 12, 230754, 119948),
  181.       Array(3, 12, 1626, 360),
  182.       Array(27, 12, 287635, 148541),
  183.       Array(11, 12, 7890, 13594),
  184.       Array(7, 12, 9095, 26942),
  185.       Array(30, 36, 311375, 73711),
  186.       Array(2, 12, 500, 84100),
  187.       Array(1, 12, 0, 228000),
  188.       Array(6, 12, 8992, 1504),
  189.       Array(3, 12, 1626, 360),
  190.       Array(4, 12, 3626, 8660),
  191.       Array(18, 12, 69041, 17594),
  192.       Array(18, 12, 69358, 16593),
  193.       Array(4, 12, 3706, 694),
  194.       Array(2, 12, 500, 3100),
  195.       Array(35, 12, 2907, 206039),
  196.       Array(8, 12, 7446, 10562),
  197.       Array(2, 12, 500, 3100),
  198.       Array(21, 12, 189051, 20076),
  199.       Array(21, 12, 188065, 19604),
  200.       Array(100, 12, 805762, 19934040),
  201.       Array(15, 12, 40589, 13905),
  202.       Array(8, 12, 7549, 2600),
  203.       Array(6, 12, 9095, 1542),
  204.       Array(15, 12, 39589, 7305),
  205.       Array(18, 12, 66326, 10959),
  206.       Array(7, 12, 9095, 9942),
  207.       Array(22, 12, 184273, 27756),
  208.       Array(8, 12, 7708, 8646),
  209.       Array(23, 12, 223512, 33280),
  210.       Array(4, 12, 3626, 660),
  211.       Array(4, 12, 3626, 660),
  212.       Array(6, 12, 8786, 80428),
  213.       Array(3, 12, 1626, 360),
  214.       Array(21, 12, 5515, 21260),
  215.       Array(1, 12, 0, 3000),
  216.       Array(1, 12, 0, 41000),
  217.       Array(30, 12, 330716, 91039),
  218.       Array(4, 12, 3626, 660),
  219.       Array(7, 12, 9329, 2022),
  220.       Array(1, 12, 0, 3000),
  221.       Array(2, 12, 500, 178700),
  222.       Array(2, 12, 500, 132900),
  223.       Array(2, 12, 500, 18500),
  224.       Array(1, 12, 0, 8200),
  225.       Array(2, 12, 500, 8300),
  226.       Array(2, 12, 500, 45900),
  227.       Array(2, 12, 500, 18900),
  228.       Array(2, 12, 500, 9500),
  229.       Array(2, 12, 500, 96500),
  230.       Array(2, 12, 500, 30700),
  231.       Array(2, 12, 500, 20100),
  232.       Array(8, 12, 7577, 67104),
  233.       Array(58, 36, 1397618, 17879602),
  234.       Array(11, 12, 8909, 11400),
  235.       Array(6, 12, 9181, 1594),
  236.       Array(2, 12, 563, 130),
  237.       Array(32, 12, 19756, 186422),
  238.       Array(6, 12, 8786, 6428),
  239.       Array(5, 12, 5786, 1028),
  240.       Array(6, 12, 8786, 1428),
  241.       Array(6, 12, 8786, 40006428),
  242.       Array(12, 12, 68456, 95240),
  243.       Array(2, 12, 500, 20100),
  244.       Array(11, 12, 7708, 7546),
  245.       Array(4, 12, 3786, 728),
  246.       Array(8, 12, 7577, 2604),
  247.       Array(5, 12, 5849, 1058),
  248.       Array(5, 12, 5786, 1028),
  249.       Array(6, 12, 8889, 1466),
  250.       Array(9, 12, 7708, 4246),
  251.       Array(9, 12, 7708, 4246),
  252.       Array(7, 12, 9095, 1942),
  253.       Array(4, 12, 3626, 660),
  254.       Array(7, 12, 8500, 1700),
  255.       Array(4, 12, 3500, 600),
  256.       Array(2, 12, 563, 130),
  257.       Array(9, 12, 7708, 4246),
  258.       Array(4, 12, 13000, 400),
  259.       Array(1, 12, 0, 3000),
  260.       Array(3, 12, 1500, 300),
  261.       Array(7, 12, 9095, 1942),
  262.       Array(10, 12, 6879, 4774),
  263.       Array(4, 12, 3626, 27660),
  264.       Array(11, 12, 7141, 7308),
  265.       Array(9, 12, 7403, 5092),
  266.       Array(19, 12, 107219, 22580),
  267.       Array(15, 12, 39589, 14305),
  268.       Array(32, 12, 8945, 229632),
  269.       Array(7, 12, 9212, 1982),
  270.       Array(1, 12, 0, 2000),
  271.       Array(2, 12, 500, 5100),
  272.       Array(1, 12, 0, 5000),
  273.       Array(2, 12, 500, 5100),
  274.       Array(23, 12, 134301, 37817),
  275.       Array(3, 12, 1626, 360),
  276.       Array(2, 12, 626, 160),
  277.       Array(32, 12, 174216, 160294),
  278.       Array(1, 12, 0, 342000),
  279.       Array(2, 12, 500, 120100),
  280.       Array(21, 12, 8515, 19560),
  281.       Array(15, 12, 40854, 12462),
  282.       Array(4, 12, 3706, 694),
  283.       Array(60, 12, 0, 0),
  284.       Array(60, 12, 0, 0),
  285.       Array(14, 12, 38860, 9140),
  286.       Array(21, 12, 7689, 32237),
  287.       Array(4, 12, 3626, 660),
  288.       Array(4, 12, 3626, 660),
  289.       Array(6, 12, 8889, 362466),
  290.       Array(3, 12, 1626, 360),
  291.       Array(1, 12, 0, 3000),
  292.       Array(2, 12, 563, 5130),
  293.       Array(2, 12, 500, 62100),
  294.       Array(4, 12, 3626, 660),
  295.       Array(45, 12, 1508096, 8341432),
  296.       Array(1, 12, 0, 114000),
  297.       Array(4, 12, 3626, 12660),
  298.       Array(1, 12, 0, 9000),
  299.       Array(4, 12, 3626, 234660),
  300.       Array(1, 12, 0, 132000),
  301.       Array(60, 12, 3293822, 40645),
  302.       Array(12, 12, 68658, 7290),
  303.       Array(6, 12, 8786, 8428),
  304.       Array(4, 12, 3786, 2728),
  305.       Array(1, 12, 0, 5000),
  306.       Array(1, 12, 0, 400000000),
  307.       Array(1, 12, 0, 2000),
  308.       Array(2, 12, 626, 5160),
  309.       Array(32, 12, 273220, 152515),
  310.       Array(2, 12, 500, 5100),
  311.       Array(1, 12, 0, 8000),
  312.       Array(1, 12, 0, 5000))
  313.     d.foreach { x =>
  314.       {
  315.         var ke = new KEntity(x, x(0) + " " + x(1) + " " + x(2) + " " + x(3), 0)
  316.         datasource = ke :: datasource
  317.       }
  318.     }
  319.     init //初始化数据
  320.     exec //执行聚类 就这么一句是蛮简洁的差点忽略掉了--~
  321.     k_Cluster.foreach(e => {
  322.       println("---------------K" + e._1)
  323.       e._2.foreach { x =>
  324.         {
  325.           print("[")
  326.           print(x.attrStr)
  327.           println("]")
  328.         }
  329.       }
  330.     })
  331.   }
  332. }
复制代码
清单3.
执行结果
  1. -------------Start
  2. --------------迭代次数:0
  3. --------------迭代次数:1
  4. --------------迭代次数:2
  5. --------------迭代次数:3
  6. --------------迭代次数:4
  7. --------------迭代次数:5
  8. ---------------K0
  9. [1.0 12.0 0.0 5000.0]
  10. [1.0 12.0 0.0 8000.0]
  11. [2.0 12.0 500.0 5100.0]
  12. [32.0 12.0 273220.0 152515.0]
  13. [2.0 12.0 626.0 5160.0]
  14. [1.0 12.0 0.0 2000.0]
  15. [1.0 12.0 0.0 5000.0]
  16. [4.0 12.0 3786.0 2728.0]
  17. [6.0 12.0 8786.0 8428.0]
  18. [12.0 12.0 68658.0 7290.0]
  19. [60.0 12.0 3293822.0 40645.0]
  20. [1.0 12.0 0.0 132000.0]
  21. [4.0 12.0 3626.0 234660.0]
  22. [1.0 12.0 0.0 9000.0]
  23. [4.0 12.0 3626.0 12660.0]
  24. [1.0 12.0 0.0 114000.0]
  25. [45.0 12.0 1508096.0 8341432.0]
  26. [4.0 12.0 3626.0 660.0]
  27. [2.0 12.0 500.0 62100.0]
  28. [2.0 12.0 563.0 5130.0]
  29. [1.0 12.0 0.0 3000.0]
  30. [3.0 12.0 1626.0 360.0]
  31. [6.0 12.0 8889.0 362466.0]
  32. [4.0 12.0 3626.0 660.0]
  33. [4.0 12.0 3626.0 660.0]
  34. [21.0 12.0 7689.0 32237.0]
  35. [14.0 12.0 38860.0 9140.0]
  36. [60.0 12.0 0.0 0.0]
  37. [60.0 12.0 0.0 0.0]
  38. [4.0 12.0 3706.0 694.0]
  39. [15.0 12.0 40854.0 12462.0]
  40. [21.0 12.0 8515.0 19560.0]
  41. [2.0 12.0 500.0 120100.0]
  42. [1.0 12.0 0.0 342000.0]
  43. [32.0 12.0 174216.0 160294.0]
  44. [2.0 12.0 626.0 160.0]
  45. [3.0 12.0 1626.0 360.0]
  46. [23.0 12.0 134301.0 37817.0]
  47. [2.0 12.0 500.0 5100.0]
  48. [1.0 12.0 0.0 5000.0]
  49. [2.0 12.0 500.0 5100.0]
  50. [1.0 12.0 0.0 2000.0]
  51. [7.0 12.0 9212.0 1982.0]
  52. [32.0 12.0 8945.0 229632.0]
  53. [15.0 12.0 39589.0 14305.0]
  54. [19.0 12.0 107219.0 22580.0]
  55. [9.0 12.0 7403.0 5092.0]
  56. [11.0 12.0 7141.0 7308.0]
  57. [4.0 12.0 3626.0 27660.0]
  58. [10.0 12.0 6879.0 4774.0]
  59. [7.0 12.0 9095.0 1942.0]
  60. [3.0 12.0 1500.0 300.0]
  61. [1.0 12.0 0.0 3000.0]
  62. [4.0 12.0 13000.0 400.0]
  63. [9.0 12.0 7708.0 4246.0]
  64. [2.0 12.0 563.0 130.0]
  65. [4.0 12.0 3500.0 600.0]
  66. [7.0 12.0 8500.0 1700.0]
  67. [4.0 12.0 3626.0 660.0]
  68. [7.0 12.0 9095.0 1942.0]
  69. [9.0 12.0 7708.0 4246.0]
  70. [9.0 12.0 7708.0 4246.0]
  71. [6.0 12.0 8889.0 1466.0]
  72. [5.0 12.0 5786.0 1028.0]
  73. [5.0 12.0 5849.0 1058.0]
  74. [8.0 12.0 7577.0 2604.0]
  75. [4.0 12.0 3786.0 728.0]
  76. [11.0 12.0 7708.0 7546.0]
  77. [2.0 12.0 500.0 20100.0]
  78. [12.0 12.0 68456.0 95240.0]
  79. [6.0 12.0 8786.0 1428.0]
  80. [5.0 12.0 5786.0 1028.0]
  81. [6.0 12.0 8786.0 6428.0]
  82. [32.0 12.0 19756.0 186422.0]
  83. [2.0 12.0 563.0 130.0]
  84. [6.0 12.0 9181.0 1594.0]
  85. [11.0 12.0 8909.0 11400.0]
  86. [8.0 12.0 7577.0 67104.0]
  87. [2.0 12.0 500.0 20100.0]
  88. [2.0 12.0 500.0 30700.0]
  89. [2.0 12.0 500.0 96500.0]
  90. [2.0 12.0 500.0 9500.0]
  91. [2.0 12.0 500.0 18900.0]
  92. [2.0 12.0 500.0 45900.0]
  93. [2.0 12.0 500.0 8300.0]
  94. [1.0 12.0 0.0 8200.0]
  95. [2.0 12.0 500.0 18500.0]
  96. [2.0 12.0 500.0 132900.0]
  97. [2.0 12.0 500.0 178700.0]
  98. [1.0 12.0 0.0 3000.0]
  99. [7.0 12.0 9329.0 2022.0]
  100. [4.0 12.0 3626.0 660.0]
  101. [30.0 12.0 330716.0 91039.0]
  102. [1.0 12.0 0.0 41000.0]
  103. [1.0 12.0 0.0 3000.0]
  104. [21.0 12.0 5515.0 21260.0]
  105. [3.0 12.0 1626.0 360.0]
  106. [6.0 12.0 8786.0 80428.0]
  107. [4.0 12.0 3626.0 660.0]
  108. [4.0 12.0 3626.0 660.0]
  109. [23.0 12.0 223512.0 33280.0]
  110. [8.0 12.0 7708.0 8646.0]
  111. [22.0 12.0 184273.0 27756.0]
  112. [7.0 12.0 9095.0 9942.0]
  113. [18.0 12.0 66326.0 10959.0]
  114. [15.0 12.0 39589.0 7305.0]
  115. [6.0 12.0 9095.0 1542.0]
  116. [8.0 12.0 7549.0 2600.0]
  117. [15.0 12.0 40589.0 13905.0]
  118. [21.0 12.0 188065.0 19604.0]
  119. [21.0 12.0 189051.0 20076.0]
  120. [2.0 12.0 500.0 3100.0]
  121. [8.0 12.0 7446.0 10562.0]
  122. [35.0 12.0 2907.0 206039.0]
  123. [2.0 12.0 500.0 3100.0]
  124. [4.0 12.0 3706.0 694.0]
  125. [18.0 12.0 69358.0 16593.0]
  126. [18.0 12.0 69041.0 17594.0]
  127. [4.0 12.0 3626.0 8660.0]
  128. [3.0 12.0 1626.0 360.0]
  129. [6.0 12.0 8992.0 1504.0]
  130. [1.0 12.0 0.0 228000.0]
  131. [2.0 12.0 500.0 84100.0]
  132. [30.0 36.0 311375.0 73711.0]
  133. [7.0 12.0 9095.0 26942.0]
  134. [11.0 12.0 7890.0 13594.0]
  135. [27.0 12.0 287635.0 148541.0]
  136. [3.0 12.0 1626.0 360.0]
  137. [31.0 12.0 230754.0 119948.0]
  138. [30.0 12.0 225482.0 90391.0]
  139. [1.0 12.0 0.0 79000.0]
  140. [14.0 12.0 38860.0 14140.0]
  141. [4.0 12.0 3626.0 89160.0]
  142. [11.0 12.0 7708.0 5546.0]
  143. [100.0 12.0 15420.0 8208707.0]
  144. [2.0 12.0 500.0 19100.0]
  145. [3.0 12.0 1626.0 360.0]
  146. [6.0 12.0 9095.0 1542.0]
  147. [4.0 12.0 3626.0 660.0]
  148. [6.0 12.0 9095.0 1542.0]
  149. [6.0 12.0 9095.0 1542.0]
  150. [6.0 12.0 9095.0 1542.0]
  151. [6.0 12.0 9095.0 1542.0]
  152. [6.0 12.0 9095.0 1542.0]
  153. [5.0 12.0 5723.0 5998.0]
  154. [6.0 12.0 9032.0 1512.0]
  155. [5.0 12.0 5723.0 998.0]
  156. [1.0 12.0 0.0 14000.0]
  157. [63.0 42.0 2290136.0 3419991.0]
  158. [40.0 12.0 3626.0 660.0]
  159. [61.0 12.0 18626.0 664.0]
  160. [111.0 12.0 0.0 0.0]
  161. [14.0 12.0 38860.0 15140.0]
  162. [66.0 12.0 133102.0 6468.0]
  163. [32.0 12.0 3563.0 39630.0]
  164. [3.0 12.0 1626.0 360.0]
  165. [4.0 12.0 3992.0 5822.0]
  166. [7.0 12.0 9149.0 9952.0]
  167. [6.0 12.0 8929.0 1474.0]
  168. ---------------K1
  169. [1.0 12.0 0.0 4.0E8]
  170. ---------------K2
  171. [6.0 12.0 8786.0 4.0006428E7]
  172. [58.0 36.0 1397618.0 1.7879602E7]
  173. [100.0 12.0 805762.0 1.993404E7]
  174. [6.0 12.0 8849.0 3.3459849E7]
  175. [100.0 12.0 8927659.0 3.8163823E7]
  176. [101.0 72.0 621319.0 1.5322448E7]
  177. [102.0 72.0 2.0134467E7 2.5894663E7]
  178. [128.0 72.0 271390.0 3.9019349E7]
  179. [38.0 12.0 303451.0 3.4083239E7]
复制代码
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-17 09:37 , Processed in 0.333554 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表