|
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>.
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>).
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; | (notes) |
|---|---|---|
| SE_Boolean | suppress_last; | (notes) |
A <Primitive Geometry> instance contains a <Union Of Primitive Geometry> instance as a component only when that <Primitive Geometry> instance can be decomposed into nested <Primitive Geometry> instances, as (for example) a <Polygon> instance can be decomposed into subfaces.
A value of zero (0) for the count field indicates that the given <Linear Geometry> instance is to be rendered as solid. Otherwise, the interpretation of the count depends on whether a <Light Rendering Properties> component is present for the given <Linear Geometry> instance. - If a <Light Rendering Properties> component is present, then count is the number of evenly spaced light points to be rendered along the <Linear Geometry>. - If no <Light Rendering Properties> component is present, then count is the number of evenly spaced line segments to be rendered along the <Linear Geometry>.
If count is greater than zero, the suppress_last field specifies whether the last segment / point in the sequence is suppressed or rendered.
|