首页 > 解决方案 > Javascript 中的 3D Thinplate 插值“rbf 无法使用给定的中心编译。/nCenters 必须是唯一的:/”

问题描述

早上好,

我有 144 个已知坐标和压力值,作为我正在创建的 3D 模型的一部分,我需要在 3D 表面上插值到模型上其他坐标的压力值。

这用于生成整个模型的压力图。

我已经使用 Thinplate 节点包解决了这个问题,但是我收到了错误

rbf failed to compile with given centers.
Centers must be unique :/

我在下面附加了我的代码,并将数组值传递给函数。

任何人都可以

谢谢亚当

代码:

const sensor_locations = [21035, 20577, 19625, 19121, 18110, 17567, 16501, 16495, 15942, 15347, 15314, 14658, 20506, 20027, 19544, 19044, 18546, 18031, 16957, 16416, 15851, 14574, 13733, 3424, 20501, 19525, 19025, 18527, 18013, 17488, 16962, 16427, 15233, 14578, 13746, 21726, 19982, 18981, 18478, 17427, 16902, 16361, 15793, 15188, 14536, 13691, 3370, 4899, 19446, 18434, 17382, 16856, 16310, 15122, 14465, 13599, 13609, 3291, 4957, 67, 19904, 19910, 18905, 18393, 17877, 17353, 16816, 15694, 15078, 14423, 13547, 3188, 19856, 19363, 18864, 17826, 17297, 17304, 16763, 16218, 15645, 15036, 13503, 3106, 19811, 18812, 18816, 17780, 17249, 16714, 16169, 15595, 14974, 14314, 13405, 21809, 19780, 19282, 18260, 17742, 16671, 15547, 14924, 14254, 2786, 2128, 975, 364, 19732, 18732, 18214, 17161, 16617, 16069, 14873, 13299, 2749, 925, 320, 866, 20624, 20151, 19660, 18656, 17626, 16571, 16015, 15436, 14153, 13250, 2675, 2009, 20658, 20162, 19178, 18174, 17650, 16577, 15458, 14822, 13236, 2678, 2652, 2634]
const sensor_pressures_raw = [267, 630, 301, 424, 270, 348, 26, 80, 106, 209, 139, 222, 493, 417, 536, 411, 482, 513, 56, 47, 200, 263, 255, 223, 659, 647, 461, 601, 380, 530, 66, 67, 221, 287, 299, 300, 149, 642, 104, 459, 87, 393, 323, 121, 74, 392, 54, 249, 569, 491, 368, 380, 308, 445, 101, 48, 205, 184, 195, 212, 708, 579, 558, 640, 422, 562, 69, 61, 245, 238, 273, 467, 204, 507, 435, 136, 14, 40, 35, 250, 413, 254, 107, 187, 227, 75, 75, 41, 15, 41, 90, 94, 115, 68, 60, 24, 582, 64, 146, 69, 131, 6, 137, 13, 255, 56, 121, 17, 335, 111, 274, 45, 24, 13, 63, 14, 586, 90, 350, 30, 511, 57, 165, 13, 39, 2, 80, 5, 323, 28, 221, 10, 537, 346, 232, 511, 40, 26, 90, 59, 458, 653, 160, 176]

let sensor_pressures = []


var TPS = require('thinplate');
var tps = new TPS(); 
sensor_pressures_raw.forEach(x => { sensor_pressures.push(x / 700) })


let fitpoints = sensor_locations.map(sl => {return JSON.parse(JSON.stringify(dataset.getPoints().getPoint(sl)))})

  // for (let index = 0; index < sensor_locations.length; index++) {
  //   fitpoints[index] = dataset.getPoints().getPoint(sensor_locations[index])
  // }

let xyz_all = []

for (let i = 0; i < nbPoints; i++) {
  xyz_all.push(dataset.getPoints().getPoint(i))
}

tps.compile(fitpoints, sensor_pressures, function (err) {
  if (err) {
    console.error(err);
    return;
  }

  tps.getValues(xyz_all, function (err, result) {

    if (err) {
      console.error(err);
      return;
    }
    debugger
    console.dir(result);
  });

})

拟合点

0: Array(3) [ 100.88408660888672, 212.900634765625, -32.05284118652344 ]
​​1: Array(3) [ 105.46353912353516, 211.90093994140625, -23.857912063598633 ]
​​2: Array(3) [ 107.02046966552734, 90.29624938964844, -112.14414978027344 ]
​​3: Array(3) [ 108.67804718017578, 209.77630615234375, -85.09613800048828 ]
​​4: Array(3) [ 112.42742156982422, 75.81475830078125, -66.8836898803711 ]
​​5: Array(3) [ 114.0309066772461, 210.903076171875, -74.89668273925781 ]
​​6: Array(3) [ 114.4420394897461, 202.43218994140625, -0.43125343322753906 ]
​​7: Array(3) [ 115.20714569091797, 213.90625, -30.301759719848633 ]
​​8: Array(3) [ 116.6295394897461, 73.65782165527344, -56.574951171875 ]
​​9: Array(3) [ 117.2217025756836, 211.81915283203125, -58.62010955810547 ]
​​10: Array(3) [ 118.35478973388672, 210.23826599121094, -90.10442352294922 ]
​​11: Array(3) [ 120.73340606689453, 72.0303726196289, -46.078086853027344 ]
​​12: Array(3) [ 124.38996124267578, 210.41432189941406, -93.63994598388672 ]
​​13: Array(3) [ 126.69576263427734, 211.33203125, -78.2345962524414 ]
​​14: Array(3) [ 129.34848022460938, 206.7864227294922, -104.72654724121094 ]
​​15: Array(3) [ 129.447265625, 213.26913452148438, -27.877534866333008 ]
​​16: Array(3) [ 131.50897216796875, 211.64935302734375, -71.75968933105469 ]
​​17: Array(3) [ 131.63900756835938, 70.1578140258789, -55.868438720703125 ]
​​18: Array(3) [ 134.27127075195312, 211.6845703125, -69.31268310546875 ]
​​19: Array(3) [ 135.03158569335938, 211.53921508789062, -76.5674057006836 ]
​​20: Array(3) [ 135.1788330078125, 70.34031677246094, -39.57354736328125 ]
​​21: Array(3) [ 136.40811157226562, 207.9145050048828, -105.32106018066406 ]
​​22: Array(3) [ 138.08718872070312, 211.571044921875, -73.70157623291016 ]
​​23: Array(3) [ 139.32351684570312, 211.10379028320312, -23.139955520629883 ]
​​24: Array(3) [ 139.88275146484375, 211.51715087890625, -75.62804412841797 ]
​​25: Array(3) [ 141.44326782226562, 208.92303466796875, -16.082704544067383 ]
​​26: Array(3) [ 142.58697509765625, 77.78064727783203, -18.847620010375977 ]
​​27: Array(3) [ 144.88253784179688, 211.28799438476562, -28.537965774536133 ]
​​28: Array(3) [ 145.75848388671875, 75.57976531982422, -27.8428897857666 ]
​​29: Array(3) [ 145.81396484375, 71.89179992675781, -37.50492858886719 ]
​​30: Array(3) [ 146.5023193359375, 201.20907592773438, -10.704648971557617 ]
​​31: Array(3) [ 148.14889526367188, 210.85171508789062, -29.454256057739258 ]
​​32: Array(3) [ 149.48272705078125, 78.34638977050781, -27.476633071899414 ]
​​33: Array(3) [ 149.55471801757812, 101.01834106445312, 169.3782196044922 ]
​​34: Array(3) [ 149.68014526367188, 81.98458862304688, -22.57505226135254 ]
​​35: Array(3) [ 150.428955078125, 196.10931396484375, -2.2797374725341797 ]
​​36: Array(3) [ 152.09658813476562, 83.15016174316406, -24.556726455688477 ]
​​37: Array(3) [ 152.951416015625, 88.10472106933594, -20.35225486755371 ]
​​38: Array(3) [ 153.11431884765625, 214.54885864257812, -74.66560363769531 ]
​​39: Array(3) [ 155.89410400390625, 97.5911865234375, -16.125219345092773 ]
​​40: Array(3) [ 155.89410400390625, 97.5911865234375, -16.125219345092773 ]
​​41: Array(3) [ 156.43896484375, 214.0477294921875, -64.8487319946289 ]
​​42: Array(3) [ 158.29376220703125, 101.58506774902344, -17.692907333374023 ]
​​43: Array(3) [ 160.16165161132812, 111.01506042480469, -11.901491165161133 ]
​​44: Array(3) [ 161.053955078125, 111.62373352050781, -14.238801956176758 ]
​​45: Array(3) [ 162.1593017578125, 117.7020492553711, -9.313745498657227 ]
​​46: Array(3) [ 162.9395751953125, 120.68119049072266, -6.940378189086914 ]
​​47: Array(3) [ 164.90338134765625, 197.55438232421875, -21.46504783630371 ]
​​48: Array(3) [ 165.95108032226562, 128.1837921142578, -8.302759170532227 ]
​​49: Array(3) [ 166.88296508789062, 199.84414672851562, -17.784963607788086 ]
​​50: Array(3) [ 169.03005981445312, 190.08355712890625, -15.918523788452148 ]
​​51: Array(3) [ 169.21072387695312, 134.92715454101562, -8.891424179077148 ]
​​52: Array(3) [ 169.96585083007812, 192.8643798828125, -20.21309471130371 ]
​​53: Array(3) [ 170.01141357421875, 198.38592529296875, -18.784048080444336 ]
​​54: Array(3) [ 170.71420288085938, 192.54278564453125, -20.97157859802246 ]
​​55: Array(3) [ 170.97494506835938, 175.59637451171875, -8.375185012817383 ]
​​56: Array(3) [ 171.47366333007812, 189.50146484375, -18.51735496520996 ]
​​57: Array(3) [ 171.54095458984375, 175.56552124023438, -9.08433723449707 ]
​​58: Array(3) [ 171.9285888671875, 172.99288940429688, -8.71599006652832 ]
​​59: Array(3) [ 172.0936279296875, 186.4736785888672, -16.531225204467773 ]
​​60: Array(3) [ 172.40875244140625, 172.9609375, -9.389253616333008 ]
​​61: Array(3) [ 173.25640869140625, 162.94883728027344, -9.390047073364258 ]
​​62: Array(3) [ 173.31744384765625, 172.87867736816406, -10.696657180786133 ]
​​63: Array(3) [ 173.48745727539062, 149.94686889648438, -10.788412094116211 ]
​​64: Array(3) [ 173.80642700195312, 195.94168090820312, -20.794713973999023 ]
​​65: Array(3) [ 174.1562957763672, 190.28118896484375, -24.52667808532715 ]
​​66: Array(3) [ 174.2464599609375, 149.61480712890625, -8.534231185913086 ]
​​67: Array(3) [ 174.39999389648438, 175.17425537109375, -12.972467422485352 ]
​​68: Array(3) [ 174.41659545898438, 165.46969604492188, -10.654634475708008 ]
​​69: Array(3) [ 175.1513671875, 155.11233520507812, -9.40239143371582 ]
​​70: Array(3) [ 175.23301696777344, 155.14764404296875, -8.134920120239258 ]
​​71: Array(3) [ 175.4330291748047, 187.87551879882812, -22.138341903686523 ]
​​72: Array(3) [ 175.85452270507812, 163.08201599121094, -10.282793045043945 ]
​​73: Array(3) [ 176.10914611816406, 188.65325927734375, -17.016958236694336 ]
​​74: Array(3) [ 176.54815673828125, 187.0029296875, -18.55782127380371 ]
​​75: Array(3) [ 25.124771118164062, 142.0825653076172, -76.76834106445312 ]
​​76: Array(3) [ 25.85663604736328, 136.84170532226562, -76.97027587890625 ]
​​77: Array(3) [ 25.883766174316406, 147.17739868164062, -77.31993103027344 ]
​​78: Array(3) [ 26.102317810058594, 151.29837036132812, -76.20498657226562 ]
​​79: Array(3) [ 27.14978790283203, 157.45408630371094, -74.33468627929688 ]
​​80: Array(3) [ 27.320556640625, 131.53451538085938, -77.4267578125 ]
​​81: Array(3) [ 27.46648406982422, 159.80307006835938, -72.61441040039062 ]
​​82: Array(3) [ 28.197494506835938, 128.45489501953125, -76.96920776367188 ]
​​83: Array(3) [ 28.608963012695312, 163.75274658203125, -76.89739990234375 ]
​​84: Array(3) [ 30.16295623779297, 128.23587036132812, -81.28057861328125 ]
​​85: Array(3) [ 30.600364685058594, 168.956787109375, -74.27706909179688 ]
​​86: Array(3) [ 30.64598846435547, 168.30580139160156, -76.48888397216797 ]
​​87: Array(3) [ 32.88695526123047, 121.03479766845703, -79.26385498046875 ]
​​88: Array(3) [ 33.13822937011719, 173.57766723632812, -74.98668670654297 ]
​​89: Array(3) [ 34.690574645996094, 175.85546875, -75.47391510009766 ]
​​90: Array(3) [ 34.764686584472656, 119.69400787353516, -81.82804870605469 ]
​​91: Array(3) [ 38.37709045410156, 180.43280029296875, -76.71825408935547 ]
​​92: Array(3) [ 39.34735870361328, 114.7492446899414, -83.31810760498047 ]
​​93: Array(3) [ 42.63446044921875, 183.98336791992188, -79.8508529663086 ]
​​94: Array(3) [ 43.85670852661133, 111.92139434814453, -87.80663299560547 ]
​​95: Array(3) [ 44.887271881103516, 185.15301513671875, -82.2673568725586 ]
​​96: Array(3) [ 44.911991119384766, 189.03988647460938, -86.29476165771484 ]
​​97: Array(3) [ 46.855865478515625, 195.15040588378906, -56.619651794433594 ]
​​98: Array(3) [ 47.13984298706055, 108.95972442626953, -87.5184555053711 ]
​​99: Array(3) [ 47.33023452758789, 186.71603393554688, -83.94669342041016 ]
​​100: Array(3) [ 48.04521560668945, 192.6866455078125, -85.08928680419922 ]
​​101: Array(3) [ 50.64859390258789, 197.44671630859375, -54.699790954589844 ]
​​102: Array(3) [ 50.649784088134766, 193.61529541015625, -87.6607437133789 ]
​​103: Array(3) [ 52.89082336425781, 190.75668334960938, -85.75118255615234 ]
​​104: Array(3) [ 53.272865295410156, 104.94217681884766, -89.72736358642578 ]
​​105: Array(3) [ 53.596492767333984, 195.184326171875, -89.23528289794922 ]
​​106: Array(3) [ 53.80146408081055, 194.92276000976562, -62.110084533691406 ]
​​107: Array(3) [ 53.83241271972656, 198.3504638671875, -45.434791564941406 ]
​​108: Array(3) [ 54.43843460083008, 194.46240234375, -76.23453521728516 ]
​​109: Array(3) [ 56.031253814697266, 196.13546752929688, -66.89887237548828 ]
​​110: Array(3) [ 59.18399429321289, 193.46250915527344, -97.95991516113281 ]
​​111: Array(3) [ 59.1861457824707, 192.8075714111328, -98.50318908691406 ]
​​112: Array(3) [ 59.3287353515625, 195.40402221679688, -96.01229095458984 ]
​​113: Array(3) [ 59.50370407104492, 200.73806762695312, -40.86035919189453 ]
​​114: Array(3) [ 61.25344467163086, 197.14083862304688, -40.784934997558594 ]
​​115: Array(3) [ 63.96444320678711, 196.36325073242188, -31.3171443939209 ]
​​116: Array(3) [ 64.02790069580078, 200.1812744140625, -56.772972106933594 ]
​​117: Array(3) [ 64.10025787353516, 202.78463745117188, -39.33196258544922 ]
​​118: Array(3) [ 64.65083312988281, 95.7833023071289, -79.98485565185547 ]
​​119: Array(3) [ 64.67508697509766, 198.56915283203125, -39.061622619628906 ]
​​120: Array(3) [ 65.52471160888672, 198.3316650390625, -35.8975830078125 ]
​​121: Array(3) [ 65.9574966430664, 201.0584716796875, -64.80506134033203 ]
​​122: Array(3) [ 66.05730438232422, 195.57931518554688, -25.1873836517334 ]
​​123: Array(3) [ 67.5682601928711, 192.89968872070312, -100.79914855957031 ]
​​124: Array(3) [ 67.69519805908203, 201.21444702148438, -76.0256118774414 ]
​​125: Array(3) [ 68.15119171142578, 201.63876342773438, -72.7732925415039 ]
​​126: Array(3) [ 69.31831359863281, 201.65859985351562, -45.10645294189453 ]
​​127: Array(3) [ 69.78935241699219, 92.12181854248047, -75.22870635986328 ]
​​128: Array(3) [ 70.3661117553711, 204.79815673828125, -34.95928955078125 ]
​​129: Array(3) [ 70.4543685913086, 202.90582275390625, -56.27281188964844 ]
​​130: Array(3) [ 70.46142578125, 193.8258514404297, -104.40751647949219 ]
​​131: Array(3) [ 70.92520904541016, 92.77224731445312, -82.46158599853516 ]
​​132: Array(3) [ 76.79761505126953, 206.43276977539062, -30.607011795043945 ]
​​133: Array(3) [ 78.47029876708984, 88.91451263427734, -81.52967071533203 ]
​​134: Array(3) [ 78.6565170288086, 209.07791137695312, -41.499420166015625 ]
135: Array(3) [ 83.15142059326172, 205.71954345703125, -37.59783172607422 ]
136: Array(3) [ 83.88106536865234, 207.2796630859375, -51.291465759277344 ]
137: Array(3) [ 84.1859359741211, 84.27461242675781, -65.96561431884766 ]
138: Array(3) [ 85.3879623413086, 204.62527465820312, -28.65123176574707 ]
139: Array(3) [ 92.2899398803711, 205.68646240234375, -25.326570510864258 ]
140: Array(3) [ 93.71566009521484, 211.19281005859375, -29.736162185668945 ]
141: Array(3) [ 97.4871597290039, 200.34426879882812, -3.1441173553466797 ]​
142: Array(3) [ 97.6780776977539, 207.35418701171875, -27.454408645629883 ]
​143: Array(3) [ 99.10681915283203, 78.62642669677734, -59.599830627441406 ]

标签: javascriptarraysmathinterpolation

解决方案


我认为错误信息很明显“中心必须是唯一的”。您在第 39 点和第 40 点有相同的点:

39: 数组(3) [155.89410400390625, 97.5911865234375, -16.125219345092773]
40: 数组(3) [155.89410400390625, 97.5911865234345, -16.17352]


推荐阅读