68 lines
2.6 KiB
C#
68 lines
2.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Geo
|
|
{
|
|
[Serializable]
|
|
public class Triangle : Polygon
|
|
{
|
|
private Point3d vertex1;
|
|
private Point3d vertex2;
|
|
private Point3d vertex3;
|
|
|
|
public Point3d Vertex1 { get => vertex1; set { vertex1 = value; Vertices[0] = vertex1; CalcTriangle(); } }
|
|
public Point3d Vertex2 { get => vertex2; set { vertex2 = value; Vertices[1] = vertex2; CalcTriangle(); } }
|
|
public Point3d Vertex3 { get => vertex3; set { vertex3 = value; Vertices[2] = vertex3; CalcTriangle(); } }
|
|
public double MaxAngleDeg { get; private set; }
|
|
|
|
public Triangle(Point3d node1, Point3d node2, Point3d node3)
|
|
{
|
|
vertex1 = node1;
|
|
AddVertice(vertex1);
|
|
vertex2 = node2;
|
|
AddVertice(vertex2);
|
|
vertex3 = node3;
|
|
AddVertice(vertex3);
|
|
CalcTriangle();
|
|
}
|
|
|
|
public Triangle(Point2d node1, Point2d node2, Point2d node3)
|
|
{
|
|
vertex1 = node1.ToPoint3d();
|
|
AddVertice(vertex1);
|
|
vertex2 = node2.ToPoint3d();
|
|
AddVertice(vertex2);
|
|
vertex3 = node3.ToPoint3d();
|
|
AddVertice(vertex3);
|
|
CalcTriangle();
|
|
}
|
|
|
|
public void CalcTriangle()
|
|
{
|
|
//Edge1 = new Line3d(vertex1, vertex2);
|
|
//Edge2 = new Line3d(vertex2, vertex3);
|
|
//Edge3 = new Line3d(vertex3, vertex1);
|
|
//Centroid = new Point3d((vertex1.X + vertex2.X + vertex3.X) / 3, (vertex1.Y + vertex2.Y + vertex3.Y) / 3, (vertex1.Z + vertex2.Z + vertex3.Z) / 3);
|
|
//Point3d minPt, maxPt;
|
|
//minPt = new Point3d(
|
|
// Math.Min(Math.Min(vertex1.X, vertex2.X), vertex3.X),
|
|
// Math.Min(Math.Min(vertex1.Y, vertex2.Y), vertex3.Y),
|
|
// Math.Min(Math.Min(vertex1.Z, vertex2.Z), vertex3.Z));
|
|
//maxPt = new Point3d(
|
|
// Math.Max(Math.Max(vertex1.X, vertex2.X), vertex3.X),
|
|
// Math.Max(Math.Max(vertex1.Y, vertex2.Y), vertex3.Y),
|
|
// Math.Max(Math.Max(vertex1.Z, vertex2.Z), vertex3.Z));
|
|
//BoundingBox = new BoundingBox2d(minPt.ToPoint2d(), maxPt.ToPoint2d());
|
|
double ang1, ang2, ang3;
|
|
ang1 = vertex1.AngleTo(vertex3, vertex2);
|
|
ang2 = vertex2.AngleTo(vertex1, vertex3);
|
|
ang3 = vertex3.AngleTo(vertex2, vertex1);
|
|
MaxAngleDeg = Math.Max(Math.Max(ang1, ang2), ang3);
|
|
CalcPolygon();
|
|
}
|
|
}
|
|
}
|