*
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class Plot2D : MonoBehaviour {
|
||||
|
||||
public Function2D Function;
|
||||
|
||||
public Vector4 ArgsBounds = new Vector4(0, 0, 1, 1);
|
||||
public Vector4 ViewBounds = new Vector4(0, 0, 1, 1);
|
||||
|
||||
public int USamples = 10;
|
||||
public int VSamples = 10;
|
||||
|
||||
private Vector3[] _points;
|
||||
|
||||
private void OnValidate()
|
||||
{
|
||||
if(USamples < 2) {
|
||||
USamples = 2;
|
||||
}
|
||||
if (VSamples < 2) {
|
||||
VSamples = 2;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDrawGizmos()
|
||||
{
|
||||
|
||||
if(Function == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var pointsCount = USamples * VSamples;
|
||||
if(_points == null || _points.Length != pointsCount) {
|
||||
_points = new Vector3[USamples * VSamples];
|
||||
}
|
||||
|
||||
|
||||
for (int vI = 0; vI < VSamples; ++vI) {
|
||||
double lV = (double)vI / (VSamples - 1);
|
||||
for (int uI = 0; uI < USamples; ++uI) {
|
||||
double lU = (double)uI / (USamples - 1);
|
||||
|
||||
double u = lU * ArgsBounds.z + ArgsBounds.x;
|
||||
double v = lV * ArgsBounds.w + ArgsBounds.y;
|
||||
|
||||
double z = Function.Evaluate(u, v);
|
||||
double x = lU * ViewBounds.z + ViewBounds.x;
|
||||
double y = lV * ViewBounds.w + ViewBounds.y;
|
||||
|
||||
_points[vI * USamples + uI] = new Vector3((float)x, (float)z, (float)y);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for(int y = 0; y < VSamples; ++y) {
|
||||
for (int x = 1; x < USamples; ++x) {
|
||||
Gizmos.DrawLine(_points[y * USamples + (x - 1)], _points[y * USamples + x]);
|
||||
}
|
||||
}
|
||||
|
||||
for (int y = 1; y < VSamples; ++y) {
|
||||
for (int x = 0; x < USamples; ++x) {
|
||||
Gizmos.DrawLine(_points[(y - 1) * USamples + x], _points[y * USamples + x]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user