|
|
|
@ -303,8 +303,8 @@ namespace Metamesh |
|
|
|
|
|
|
|
|
|
|
|
this.coau = (m + n) / LSQD; |
|
|
|
this.coau = (m + n) / LSQD; |
|
|
|
this.cobu = -n / LSQD; |
|
|
|
this.cobu = -n / LSQD; |
|
|
|
this.coav = (-thirdR3 * (m - n)) / LSQD; |
|
|
|
this.coav = -thirdR3 * (m - n) / LSQD; |
|
|
|
this.cobv = (thirdR3 * (2 * m + n)) / LSQD; |
|
|
|
this.cobv = thirdR3 * (2 * m + n) / LSQD; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void CreateInnerFacets() |
|
|
|
public void CreateInnerFacets() |
|
|
|
@ -392,14 +392,15 @@ namespace Metamesh |
|
|
|
|
|
|
|
|
|
|
|
public void MapABOBtoOBOA() |
|
|
|
public void MapABOBtoOBOA() |
|
|
|
{ |
|
|
|
{ |
|
|
|
var point = new Vector2Int(0, 0); |
|
|
|
//var point = new Vector2Int(0, 0); |
|
|
|
for (var i = 0; i < this.isoVecsABOB.Count; i++) |
|
|
|
for (var i = 0; i < this.isoVecsABOB.Count; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var temp = new List<Vector2Int>(); |
|
|
|
var temp = new List<Vector2Int>(); |
|
|
|
for (var j = 0; j < 3; j++) |
|
|
|
for (var j = 0; j < 3; j++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
point.x = this.isoVecsABOB[i][j].x; |
|
|
|
//point.x = this.isoVecsABOB[i][j].x; |
|
|
|
point.y = this.isoVecsABOB[i][j].y; |
|
|
|
//point.y = this.isoVecsABOB[i][j].y; |
|
|
|
|
|
|
|
var point = this.isoVecsABOB[i][j]; |
|
|
|
if (this.vertexTypes[i][j] == 0) |
|
|
|
if (this.vertexTypes[i][j] == 0) |
|
|
|
{ |
|
|
|
{ |
|
|
|
point = point.RotateNeg120(this.m, this.n); |
|
|
|
point = point.RotateNeg120(this.m, this.n); |
|
|
|
@ -414,14 +415,15 @@ namespace Metamesh |
|
|
|
|
|
|
|
|
|
|
|
public void MapABOBtoBAOA() |
|
|
|
public void MapABOBtoBAOA() |
|
|
|
{ |
|
|
|
{ |
|
|
|
var point = new Vector2Int(0, 0); |
|
|
|
//var point = new Vector2Int(0, 0); |
|
|
|
for (var i = 0; i < this.isoVecsABOB.Count; i++) |
|
|
|
for (var i = 0; i < this.isoVecsABOB.Count; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var temp = new List<Vector2Int>(); |
|
|
|
var temp = new List<Vector2Int>(); |
|
|
|
for (var j = 0; j < 3; j++) |
|
|
|
for (var j = 0; j < 3; j++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
point.x = this.isoVecsABOB[i][j].x; |
|
|
|
//point.x = this.isoVecsABOB[i][j].x; |
|
|
|
point.y = this.isoVecsABOB[i][j].y; |
|
|
|
//point.y = this.isoVecsABOB[i][j].y; |
|
|
|
|
|
|
|
var point = this.isoVecsABOB[i][j]; |
|
|
|
if (this.vertexTypes[i][j] == 1) |
|
|
|
if (this.vertexTypes[i][j] == 1) |
|
|
|
{ |
|
|
|
{ |
|
|
|
point = point.Rotate120(this.m, this.n); |
|
|
|
point = point.Rotate120(this.m, this.n); |
|
|
|
@ -514,9 +516,9 @@ namespace Metamesh |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//order vertices by x and then y |
|
|
|
//order vertices by x and then y |
|
|
|
vertices.Sort((a, b) => { return a.x - b.x; }); |
|
|
|
vertices.Sort((a, b) => { return a.x.CompareTo(b.x); }); |
|
|
|
|
|
|
|
|
|
|
|
vertices.Sort((a, b) => { return a.y - b.y; }); |
|
|
|
vertices.Sort((a, b) => { return a.y.CompareTo(b.y); }); |
|
|
|
|
|
|
|
|
|
|
|
var min = Enumerable.Repeat(int.MaxValue, m + n + 1).ToList(); |
|
|
|
var min = Enumerable.Repeat(int.MaxValue, m + n + 1).ToList(); |
|
|
|
var max = Enumerable.Repeat(int.MinValue, m + n + 1).ToList(); |
|
|
|
var max = Enumerable.Repeat(int.MinValue, m + n + 1).ToList(); |
|
|
|
@ -566,7 +568,7 @@ namespace Metamesh |
|
|
|
var dist = -1; |
|
|
|
var dist = -1; |
|
|
|
for (var i = 0; i < len; i++) |
|
|
|
for (var i = 0; i < len; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
cartesian[i] = vertices[i].ToCartesianOrigin(new Vector2Int(0, 0), 0.5f); |
|
|
|
cartesian[i] = vertices[i].ToCartesianOrigin(Vector2Int.zero, 0.5f); |
|
|
|
distFromO[i] = DistFrom(vertices[i], "O"); |
|
|
|
distFromO[i] = DistFrom(vertices[i], "O"); |
|
|
|
distFromA[i] = DistFrom(vertices[i], "A"); |
|
|
|
distFromA[i] = DistFrom(vertices[i], "A"); |
|
|
|
distFromB[i] = DistFrom(vertices[i], "B"); |
|
|
|
distFromB[i] = DistFrom(vertices[i], "B"); |
|
|
|
@ -779,7 +781,7 @@ namespace Metamesh |
|
|
|
var nearIndex = 12; |
|
|
|
var nearIndex = 12; |
|
|
|
for (var i = 0; i < 12; i++) |
|
|
|
for (var i = 0; i < 12; i++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
nearTo[i].Sort((a, b) => { return a[1] - b[1]; }); |
|
|
|
nearTo[i].Sort((a, b) => { return a[1].CompareTo(b[1]); }); |
|
|
|
|
|
|
|
|
|
|
|
foreach (var item in nearTo[i]) |
|
|
|
foreach (var item in nearTo[i]) |
|
|
|
{ |
|
|
|
{ |
|
|
|
@ -876,6 +878,8 @@ namespace Metamesh |
|
|
|
var tempFace = this.SetOrder(m, new List<int>(map[m])); |
|
|
|
var tempFace = this.SetOrder(m, new List<int>(map[m])); |
|
|
|
if (goldbergPolyhedronData.face.Count <= m) |
|
|
|
if (goldbergPolyhedronData.face.Count <= m) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
if (goldbergPolyhedronData.face.Count != m) |
|
|
|
|
|
|
|
Debug.Log($"goldbergPolyhedronData.face.Count != m: {goldbergPolyhedronData.face.Count} != {m}"); |
|
|
|
goldbergPolyhedronData.face.Add(tempFace); |
|
|
|
goldbergPolyhedronData.face.Add(tempFace); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
@ -900,6 +904,8 @@ namespace Metamesh |
|
|
|
var tempVertex = new Vector3(cx / 3, cy / 3, cz / 3); |
|
|
|
var tempVertex = new Vector3(cx / 3, cy / 3, cz / 3); |
|
|
|
if (goldbergPolyhedronData.vertex.Count <= el) |
|
|
|
if (goldbergPolyhedronData.vertex.Count <= el) |
|
|
|
{ |
|
|
|
{ |
|
|
|
|
|
|
|
if (goldbergPolyhedronData.face.Count != el) |
|
|
|
|
|
|
|
Debug.Log($"goldbergPolyhedronData.face.Count != el: {goldbergPolyhedronData.face.Count} != {el}"); |
|
|
|
goldbergPolyhedronData.vertex.Add(tempVertex); |
|
|
|
goldbergPolyhedronData.vertex.Add(tempVertex); |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
else |
|
|
|
@ -969,14 +975,14 @@ namespace Metamesh |
|
|
|
var radius = 1f; |
|
|
|
var radius = 1f; |
|
|
|
geodesicData.vertex = geodesicData.vertex.Select((el) => |
|
|
|
geodesicData.vertex = geodesicData.vertex.Select((el) => |
|
|
|
{ |
|
|
|
{ |
|
|
|
var a = el[0]; |
|
|
|
var a = el.x; |
|
|
|
var b = el[1]; |
|
|
|
var b = el.y; |
|
|
|
var c = el[2]; |
|
|
|
var c = el.z; |
|
|
|
var d = Mathf.Sqrt(a * a + b * b + c * c); |
|
|
|
var d = Mathf.Sqrt(a * a + b * b + c * c); |
|
|
|
el[0] *= radius / d; |
|
|
|
//el[0] *= radius / d; |
|
|
|
el[1] *= radius / d; |
|
|
|
//el[1] *= radius / d; |
|
|
|
el[2] *= radius / d; |
|
|
|
//el[2] *= radius / d; |
|
|
|
return el; |
|
|
|
return el * radius / d; |
|
|
|
}).ToList(); |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
|
|
|
|
return geodesicData; |
|
|
|
return geodesicData; |
|
|
|
|