@startuml
struct Plane {
    + NormalAndDistance : float4
    + Plane(coefficientA:float, coefficientB:float, coefficientC:float, coefficientD:float)
    + Plane(normal:float3, distance:float)
    + Plane(normal:float3, pointInPlane:float3)
    + Plane(vector1InPlane:float3, vector2InPlane:float3, pointInPlane:float3)
    + {static} CreateFromUnitNormalAndDistance(unitNormal:float3, distance:float) : Plane
    + {static} CreateFromUnitNormalAndPointInPlane(unitNormal:float3, pointInPlane:float3) : Plane
    + Normal : float3 <<get>> <<set>>
    + Distance : float <<get>> <<set>>
    + {static} Normalize(plane:Plane) : Plane
    + {static} Normalize(planeCoefficients:float4) : float4
    + SignedDistanceToPoint(point:float3) : float
    + Projection(point:float3) : float3
    + Flipped : Plane <<get>>
    - CheckPlaneIsNormalized() : void
}
@enduml
