38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
using UnityEngine;
|
|
|
|
public static class Extensions
|
|
{
|
|
// Zeichnet eine Quadratic Bezier Kurve (Start, Control, End) mit N Punkten
|
|
public static void SetQuadraticBezier(this LineRenderer line, Vector3 start, Vector3 control, Vector3 end, int segments)
|
|
{
|
|
line.positionCount = segments + 1;
|
|
|
|
for (int i = 0; i <= segments; i++)
|
|
{
|
|
float t = i / (float)segments;
|
|
// Quadratic Bezier Formel
|
|
Vector3 point = (1 - t) * (1 - t) * start +
|
|
2 * (1 - t) * t * control +
|
|
t * t * end;
|
|
|
|
line.SetPosition(i, point);
|
|
}
|
|
}
|
|
|
|
public static void SetGreatCircleArc(this LineRenderer line, Vector3 start, Vector3 end, int segments, float radius)
|
|
{
|
|
// Normalize to sphere radius
|
|
Vector3 startNorm = start.normalized * radius;
|
|
Vector3 endNorm = end.normalized * radius;
|
|
|
|
line.positionCount = segments + 1;
|
|
|
|
for (int i = 0; i <= segments; i++)
|
|
{
|
|
float t = i / (float)segments;
|
|
// spherical linear interpolation (slerp) between start and end
|
|
Vector3 point = Vector3.Slerp(startNorm, endNorm, t);
|
|
line.SetPosition(i, point);
|
|
}
|
|
}
|
|
}
|