私のアルゴリズムは、UセグメントとVセグメントを反復処理する2次元ループを使用して、3次元空間の形状の頂点を計算します。
for (LONG i=0; i < info.useg + 1; i++) {
// Calculate the u-parameter.
u = info.umin + i * info.udelta;
for (LONG j=0; j < info.vseg + 1; j++) {
// Calculate the v-parameter.
v = info.vmin + j * info.vdelta;
// Compute the point's position.
point = calc_point(op, &info, u, v);
// Set the point to the object and increase the point-index.
points[point_i] = point;
point_i++;
}
}
ただし、ポイントの配列は1次元配列であるため、point_i
ループごとに増分されます。を介してインデックスを計算できることを知っていますpoint_i = i * info.vseg + j
。
このループをマルチスレッド化する必要があります。私の目的は、すべてが特定の範囲のポイントを処理する多数のスレッドを作成することでした。スレッドでは、次のようにします。
for (LONG x=start; x <= end; x++) {
LONG i = // ...
LONG j = // ...
Real u = info.umin + i * info.udelta;
Real v = info.vmin + j * info.vdelta;
points[i] = calc_point(op, &info, u, v);
}
問題は、線形ポイントインデックスからi
とj
インデシを計算することです。どうすればいつ計算できますかi
(j
よく思います):
point_i = i * vsegments + j
ここで数学を解くことができません。