在数组中找到多个对称中心

问题描述 投票:0回答:1

我试图在数组中找到多个对称中心以用值填充它。我决定将长度分成相似的部分,并从每个中心双向穿过。在这里,我使它适用于偶数段,但对于奇数段来说并不准确:当只需要设置 1 时,它会在中心设置对。并且我的

OddOffset
在某些情况下不正确(例如,对于 3 个中心或长度) 3).

const double SegmentLength = static_cast<double>(PointsCount) / SymmetryCenters;
const double HalfSegment = SegmentLength / 2;
//const auto OddOffset = std::fmod(SegmentLength, 2);

for (int32 CenterIndex = 0; CenterIndex < SymmetryCenters; CenterIndex++) {
    const int32 Center = FMath::RoundToInt(CenterIndex * SegmentLength + HalfSegment);

    for (int32 PointIndex = 0; PointIndex < HalfSegment; PointIndex++) {
        const int32 LeftIndex = Center - PointIndex - 1;
        const int32 RightIndex = Center + PointIndex;
        // const int32 RightIndex = Center + PointIndex - OddOffset;

        // Set values if within bounds
        if (LeftIndex >= 0) OutPoints[LeftIndex] = MyValue();
        if (RightIndex < PointsCount) OutPoints[RightIndex] = MyValue();
    }
}

这是不同阵列长度下1个和2个对称中心的一些测试数据:

For 06 Length: 1) [3], 2) [2, 5]
For 12 Length: 1) [6], 2) [3, 9]
For 18 Length: 1) [9], 2) [5, 14]

也不确定使用左右索引是否是最好的方法,也许一个简单的循环 0..N - 1 可能会更好,需要尝试转换。

c++ arrays algorithm symmetry
1个回答
0
投票

我不明白什么是“对称”,什么是“中心”...... 但看起来你想将 N 个段排列在一个数组中。 (其中,所有线段的长度相同)

如果是这样...

例如,如果数组长度为“7”,段数 N 为 2,则每个段的长度将为 3。 在这种情况下,段排列模式将是:

  • { X,1,1,1,2,2,2 }
  • { 1,1,1,X,2,2,2 }
  • { 1,1,1,2,2,2,X }

其中“1”是第一段,“2”是第二段,X”是不在任一段中的数组元素。

如果你想做类似上面的事情,你应该做的将可以被认为是“决定把X放在哪里”。

也就是...从只有线段排列好的状态开始,然后决定在哪里插入X。 有三个可插入点(:最左边、段之间、最右边)。

v     v     v
 1 1 1 2 2 2
© www.soinside.com 2019 - 2024. All rights reserved.