FUNCTION equal_cregion_pregion
(crgn : cartesian_complex_number_region, prgn : polar_complex_number_region) : LOGICAL;
LOCAL arng, amin, xc, yc : REAL; aitv, xitv, yitv : real_interval; c_in : BOOLEAN; END_LOCAL; IF NOT EXISTS (crgn) OR NOT EXISTS (prgn) THEN RETURN (FALSE); END_IF; IF max_exists(prgn.distance_constraint) THEN RETURN (FALSE); END_IF; IF real_min(prgn.distance_constraint) <> 0.0 THEN RETURN (FALSE); END_IF; c_in := min_included(prgn.distance_constraint); aitv := prgn.direction_constraint; amin := aitv.min; arng := aitv.max - amin; xc := prgn.centre.real_part; yc := prgn.centre.imag_part; xitv := crgn.real_constraint; yitv := crgn.imag_constraint; IF arng = 0.5*PI THEN IF amin = 0.0 THEN -- quadrant TO upper right RETURN (NOT max_exists(xitv) AND NOT max_exists(yitv) AND min_exists(xitv) AND min_exists(yitv) AND (real_min(xitv) = xc) AND (real_min(yitv) = yc) AND ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND min_included(yitv)) OR (NOT c_in AND NOT min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND NOT min_included(yitv)) OR (NOT c_in AND min_included(aitv) AND NOT max_included(aitv) AND NOT min_included(xitv) AND min_included(yitv)) OR (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT min_included(xitv) AND NOT min_included(yitv)))); END_IF; IF amin = 0.5*PI THEN -- quadrant TO upper left RETURN (max_exists(xitv) AND NOT max_exists(yitv) AND NOT min_exists(xitv) AND min_exists(yitv) AND (real_max(xitv) = xc) AND (real_min(yitv) = yc) AND ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND min_included(yitv)) OR (NOT c_in AND NOT min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND NOT min_included(yitv)) OR (NOT c_in AND min_included(aitv) AND NOT max_included(aitv) AND NOT max_included(xitv) AND min_included(yitv)) OR (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT max_included(xitv) AND NOT min_included(yitv)))); END_IF; IF amin = -PI THEN -- quadrant TO lower left RETURN (max_exists(xitv) AND max_exists(yitv) AND NOT min_exists(xitv) AND NOT min_exists(yitv) AND (real_max(xitv) = xc) AND (real_max(yitv) = yc) AND ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND max_included(yitv)) OR (NOT c_in AND NOT min_included(aitv) AND max_included(aitv) AND max_included(xitv) AND NOT max_included(yitv)) OR (NOT c_in AND min_included(aitv) AND NOT max_included(aitv) AND NOT max_included(xitv) AND max_included(yitv)) OR (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT max_included(xitv) AND NOT max_included(yitv)))); END_IF; IF amin = -0.5*PI THEN -- quadrant TO lower right RETURN (NOT max_exists(xitv) AND max_exists(yitv) AND min_exists(xitv) AND NOT min_exists(yitv) AND (real_min(xitv) = xc) AND (real_max(yitv) = yc) AND ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND max_included(yitv)) OR (NOT c_in AND NOT min_included(aitv) AND max_included(aitv) AND min_included(xitv) AND NOT max_included(yitv)) OR (NOT c_in AND min_included(aitv) AND NOT max_included(aitv) AND NOT min_included(xitv) AND max_included(yitv)) OR (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT min_included(xitv) AND NOT max_included(yitv)))); END_IF; END_IF; IF arng = PI THEN IF amin = 0.0 THEN -- upper half space RETURN (NOT max_exists(xitv) AND NOT max_exists(yitv) AND NOT min_exists(xitv) AND min_exists(yitv) AND (real_min(yitv) = yc) AND ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(yitv)) OR (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT min_included(yitv)))); END_IF; IF amin = 0.5*PI THEN -- left half space RETURN (max_exists(xitv) AND NOT max_exists(yitv) AND NOT min_exists(xitv) AND NOT min_exists(yitv) AND (real_max(xitv) = xc) AND ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(xitv)) OR (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT max_included(xitv)))); END_IF; IF amin = -PI THEN -- lower half space RETURN (NOT max_exists(xitv) AND max_exists(yitv) AND NOT min_exists(xitv) AND NOT min_exists(yitv) AND (real_max(yitv) = yc) AND ((c_in AND min_included(aitv) AND max_included(aitv) AND max_included(yitv)) OR (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT max_included(yitv)))); END_IF; IF amin = -0.5*PI THEN -- right half space RETURN (NOT max_exists(xitv) AND NOT max_exists(yitv) AND min_exists(xitv) AND NOT min_exists(yitv) AND (real_min(xitv) = xc) AND ((c_in AND min_included(aitv) AND max_included(aitv) AND min_included(xitv)) OR (NOT c_in AND NOT min_included(aitv) AND NOT max_included(aitv) AND NOT min_included(xitv)))); END_IF; END_IF; RETURN (FALSE); END_FUNCTION; -- equal_cregion_pregion
|