我有n张卡。每张卡的宽度均为a单位。
许多流行的纸牌游戏在“呈扇形”位置显示一手纸牌(参见下图),我也想这样做。通过使用以下公式,我可以将卡成弧形放置:

// NOTE: UE4 uses a left-handed, Z-up coordinate system.
//  (+X = Forward, +Y = Right, and +Z = Up)

// NOTE: Card meshes have their pivot points in the center of the mesh
//  (meshSize * 0.5f = local origin of mesh)

// n = Number of card meshes
// a = Width of each card mesh

const auto arcWidth = 0.8f;
const auto arcHeight = 0.15f;
const auto rotationAngle = 30.f;
const auto deltaAngle = 180.f;
const auto delta = FMath::DegreesToRadians(deltaAngle) / (float)(n);
const auto halfDelta = delta * 0.5f;
const auto halfMeshWidth = a * 0.5f;
const auto radius = halfMeshWidth + (rotationAngle / FMath::Tan(halfDelta));

for (unsigned y = 0; y < n; y++)
{
    auto ArcX = (radius * arcWidth) * FMath::Cos(((float)y * delta) + halfDelta);
    auto ArcY = (radius * arcHeight) * FMath::Sin(((float)y * delta) + halfDelta);
    auto ArcVector = FVector(0.f, ArcX, ArcY);

    // Draw a line from the world origin to the card origin
    DrawDebugLine(GetWorld(), FVector::ZeroVector, ArcVector, FColor::Magenta, true, -1.f, 0, 2.5f);
}

这是《炉石传说》的5张卡片示例:
c&#43;&#43; - 散开 “arc”卡网格-LMLPHP

这是《杀戮尖塔》的5张卡片示例:
c&#43;&#43; - 散开 “arc”卡网格-LMLPHP

但是我正在产生的结果很好……次优:
c&#43;&#43; - 散开 “arc”卡网格-LMLPHP

无论我如何调整变量,最左侧和最右侧的纸牌都会一起压入手中。我想这与圆点的分布方式有关,然后向下挤压(通过arcHeight)以形成椭圆?无论如何,即使您仔细查看示例引用,也可以看到结果相差甚远,您可以看到从每个卡的中心存在一个弧(在这些卡在本地空间中旋转之前)。

我该怎么做才能获得更均匀的弧度?

最佳答案

您的分布确实看起来像椭圆。您需要一个非常大的圆圈,该圆圈的中心偏离屏幕底部。类似于下面的圆圈,其中黑色矩形是您绘制卡片的屏幕区域,绿色点是卡片位置。请注意,圆的半径较大,并且卡片之间的 Angular 较小。

c&#43;&#43; - 散开 “arc”卡网格-LMLPHP

关于c++ - 散开 “arc”卡网格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48980922/

10-10 10:48