The SEDRIS Data Representation Model
APPENDIX A - Classes Arc |
---|
An instance of this DRM class specifies a circular arc, the endpoints of which are specified by the <Vertex> components, and the centre point is specified by the <Location> component.
A geometric representation of a treeline, or a string of lights that follow the path of the <Arc> instance.
The following formulas show how centre point, radius, beginning and ending angles can be derived from the first set of information (beginning, mid, and ending points on the <Arc> instance).
double x1, y1, /* beginning point */ x2, y2, /* mid point */ x3, y3, /* ending point */ sx1, sx2, sx3, /* squared x values */ sy1, sy2, sy3, /* squared y values */ ad, D, E, F, /* determinate values */ dc, ec, fc, /* coefficient values */ centrex, centrey, /* centre point of arc */ r, /* radius of arc */ ab, ae; /* beginning & ending angles */ /* get squared values */ sx1 = x1*x1; sx2 = x2*x2; sx3 = x3*x3; sy1 = y1*y1; sy2 = y2*y2; sy3 = y3*y3; /* get "a" determinate */ ad = x1*(y2 - y3) - y1*(x2-x3) + x2*y3 - x3*y2; /* get "D" determinate */ D = (sx1 + sy1)*(y2 - y3) - y1*((sx2 + sy2) - (sx3 + sy3)) + y3*(sx2 + sy2) - y2*(sx3 + sy3); /* get "E" determinate */ E = (sx1 + sy1)*(x2 - x3) - x1*((sx2 + sy2) - (sx3 + sy3)) + x3*(sx2 + sy2) - x2*(sx3 + sy3); /* get "F" determinate */ F = (sx1 + sy1)*(x2*y3 - x3*y2) - x1*(y3*(sx2 + sy2) - y2(sx3 + sy3)) + y1*(x3*(sx2 + sy2) - x2*(sx3 + sy3)); D = -D; F = -F; /* check for colinear point */ if (ad == 0.0) { fprintf(stderr, "ERROR! colinear point\n"); fflush(stderr); exit(-1); } /* get coefficients */ dc = D/(2.0*ad); ec = E/(2.0*ad); fc = F/ad; /* get centre point */ centrex = -dc; centrey = -ec; /* get radius */ r = sqrt((dc*dc + ec*ec - fc)); /* get beginning and ending angles */ ab = atan2(y1 - centrey, x1 - centrex); ae = atan2(y3 - centrey, x3 - centrex);
SE_Short_Integer_Unsigned | count; | 2 |
---|---|---|
SE_Boolean | suppress_last; | 3 |
EXAMPLE A <Polygon> instance can be decomposed into multiple <Polygon> instances representing subfaces.
The count field of a <Linear Geometry> instance indicates how the <Linear Geometry> instance is to be rendered. A count field value of zero for a given <Linear Geometry> instance L indicates that L is to be rendered as one solid line segment, and the suppress_last field does not apply.
If count is greater than zero and L has a <Light Rendering Properties> component, the following applies:
If count is greater than zero and L does not have a <Light Rendering Properties> component, the following applies:
If count is greater than one, the suppress_last field specifies whether the last segment or point in the sequence is suppressed or rendered.
|