我使用以下代码计算使用线条渲染器绘制的圆弧的点。
html, body {
height: 100%;
}
如何更改角度for (int i = 0; i <= pts; i++)
{
float x = center.x + radius * Mathf.Cos(ang * Mathf.Deg2Rad);
float y = center.y + radius * Mathf.Sin(ang * Mathf.Deg2Rad);
arcLine.positionCount = i + 1;
arcLine.SetPosition(i, new Vector2(x, y));
ang += (float)totalAngle / pts;
}
以沿着ang
行创建反射弧,如下图所示?
请注意,P1P2
表示要在0到360之间绘制的圆圈部分。
答案 0 :(得分:0)
我不完全确定这是可能的,但我提出了另一种方式:
首先,辅助函数:
Vector2 GetPosition (float radius, float angle)
{
angle *= Mathf.Deg2Rad;
return new Vector2
{
x = radius * Mathf.Cos(angle),
y = radius * Mathf.Sin(angle)
};
}
然后,计算位置p1
和p2
:
var p1 = GetPosition(radius, ang);
var p2 = GetPosition(radius, totalAngle);
导出中点p3
:
var p3 = (p1 + p2) * 0.5f;
最后旋转原始点p3
以获得反射点:
var pos = p3 * 2f - GetPosition(radius, ang);
那就是它!您的代码应如下所示:
void Draw ()
{
var p1 = GetPosition(radius, ang);
var p2 = GetPosition(radius, totalAngle);
var p3 = (p1 + p2) * 0.5f;
for (int i = 0; i <= pts; i++)
{
var pos = p3 * 2f - GetPosition(radius, ang);
arcLine.positionCount = i + 1;
arcLine.SetPosition(i, center + pos);
ang += totalAngle / pts;
}
}
Vector2 GetPosition (float radius, float angle)
{
angle *= Mathf.Deg2Rad;
return new Vector2
{
x = radius * Mathf.Cos(angle),
y = radius * Mathf.Sin(angle)
};
}
这里有它的实际效果: