تبدیل داده های منحنی درون یابی

تبدیل داده های منحنی درون یابی

تبدیل داده های منحنی درون یابی
روش زیر یک منحنی درون یابی هندسی را به تابع درون یابی (با ایجاد جدول درون یابی) تبدیل می کند. این روش استخراج اطلاعات هندسی را از پارامترسازی زیربنایی یک یال نشان می‌دهد. لبه نباید یک منحنی درون یابی باشد ، بلکه می تواند هر یال منفرد باشد.
منحنی برای یکنواخت بودن بررسی می‌شود، که برای اینکه بتوان آن را به تابع درون‌یابی تبدیل کرد، لازم است. توجه داشته باشید که از آنجایی که یک منحنی درون یابی با استفاده از splines نشان داده می شود، حتی اگر نقاط درون یابی یک دنباله یکنواخت را تشکیل دهند، منحنی حاصل ممکن است نباشد. از این رو، دومین بررسی سازگاری (بررسی اول را می توان به طور بالقوه نادیده گرفت).
// Convert using N points
int N = 100;
double monoTol = 1e-6;
int edgeNum=1;
// Update and get geometry information
model.component(“comp1”).geom(“geom1”).run(“fin”);
GeomSequence geom1 = model.component(“comp1”).geom(“geom1”);
GeomFeature ic1 = geom1.feature(“ic1”);
double[][] curvePoints = ic1.getDoubleMatrix(“table”);
int len = curvePoints.length;
double minX = curvePoints[0][0];
double maxX = curvePoints[len-1][0];
double scale = maxX-minX;
double scaledTol = monoTol*scale;
for (int i = 1; i < len; i++) {
  if ((curvePoints[i][0]-curvePoints[i-1][0]) < scaledTol) {
    error(“Curve needs to be a function curve with monotonously growing x       coordinates.”);
  }
}
double minMaxS[] = geom1.edgeParamRange(edgeNum);
double minS = minMaxS[0];
double maxS = minMaxS[1];
double sList[] = new double[N];
for (int k = 0; k < N; k++) {
  sList[k] = (double) (N-1-k)/(double) (N-1)*minS+k/(double) (N-1)*maxS;
}
double[][] XY = geom1.edgeX(1, sList);
for (int j = 1; j < N; j++) {
  if ((XY[j][0]-XY[j-1][0]) < scaledTol) {
    error(“Curve needs to be a function curve with monotonously growing x       coordinates.”);
  }
}
// Create interpolation table
model.func().create(“int1”, “Interpolation”);
with(model.func(“int1”));
  set(“funcname”, “int1”);
  set(“interp”, “cubicspline”);
  set(“extrap”, “linear”);
endwith();
model.func(“int1”).set(“table”, toString(XY));
نظرات
این روش فرض می کند که یک دنباله هندسی geom1 با منحنی درون یابی ic1 وجود دارد. همچنین فرض می‌کند که هیچ ویژگی هندسی دیگری وجود ندارد و شی هندسی دارای یک لبه است. عدد صحیح N تعیین می کند که جدول درون یابی چقدر باید دانه بندی شود. فرض بر این است که تنها یک یال در دنباله هندسه ( edgeNum ) وجود دارد. توجه داشته باشید که محدوده پارامتر منحنی ممکن است بازه واحد نباشد ( minS نباید 0.0 باشد و maxS نباید 1.0 باشد ). برای اجرای بیش از یک بار روش، می توانید یک متد پاکسازی ایجاد کنید که حاوی خطوط زیر باشد:
model.func().remove(“int1”);
model.result().remove(“pg1”);
برای حذف گره های درخت مدل قبلا ایجاد شده.