/* inside_test.pov * Persistence of Vision Raytracer scene description file * * Demonstrates an inside() failure. * * Copyright © 2025 Richard Callwood III. Some rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * 2025-May-03 Created. */ #version max (3.5, min (3.8, version)); global_settings { assumed_gamma 1 } #declare fn_Bezier_arc = function (x) { (8 * cos (x / 2) - 4 - 4 * cos (x)) / (3 * sin (x)) } #macro Rotate_uv (V, A) #local V3 = vrotate (V, A * z); #end #declare uv_Slope = <-5.5, 26>; #declare rRim = 0.75; #declare uv_Rim = <42.5, 264> - <0, rRim>; #declare Angle = degrees (atan2 (uv_Slope.y, uv_Slope.x)); #declare uv_Uppers = array[6][3] #declare uv_Uppers[0][0] = <0, 0>; #declare uv_Uppers[0][1] = <52.2, 184>; #declare uv_Uppers[0][2] = <0, 26>; #declare uv_Uppers[1][0] = -uv_Slope; #declare uv_Uppers[1][1] = uv_Rim + Rotate_uv (rRim * y, Angle); #declare uv_Uppers[4][1] = uv_Rim + Rotate_uv (-rRim * y, Angle); #declare uv_Uppers[4][2] = -uv_Slope; #declare uv_Uppers[5][0] = <0, 26>; #declare uv_Uppers[5][1] = <54, 184>; #declare uv_Uppers[5][2] = <0, 0>; #declare Angle1 = 180 - Angle; #declare Bez1 = fn_Bezier_arc (radians (Angle1)) * rRim; #declare Bez2 = fn_Bezier_arc (radians (Angle / 2)) * rRim; #declare uv_Uppers[1][2] = Rotate_uv (Bez2 * x, Angle); #declare uv_Uppers[2][0] = Rotate_uv (-Bez2 * x, Angle / 2); #declare uv_Uppers[2][1] = uv_Rim + Rotate_uv (rRim * y, Angle / 2); #declare uv_Uppers[2][2] = Rotate_uv (Bez2 * x, Angle / 2); #declare uv_Uppers[3][0] = <-Bez2, 0>; #declare uv_Uppers[3][1] = <42.5, 264>; #declare uv_Uppers[3][2] = ; #declare uv_Uppers[4][0] = Rotate_uv (-Bez1 * x, -Angle1); #declare Test_object = lathe { bezier_spline 56, <0.0, 112.0>, <29.0, 112.0>, <52.2, 144.0>, <52.2, 184.0>, #local I = 1; #while (I <= 5) uv_Uppers[I-1][1], uv_Uppers[I-1][1] + uv_Uppers[I-1][2], uv_Uppers[I][1] + uv_Uppers[I][0], uv_Uppers[I][1], #local I = I + 1; #end <54.0, 184.0>, <54.0, 144.0>, <33.6, 120.9>, <18.0, 113.7>, <18.0, 113.7>, <5.0, 107.7>, <4.5, 106.0>, <4.5, 59.0>, <4.5, 59.0>, <4.5, 12.0>, <4.9, 11.5>, <17.5, 8.7>, <17.5, 8.7>, <26.95, 6.6>, <35.95, 4.6>, <45.4, 2.5>, <45.4, 2.5>, <46.0300, 2.36>, <46.6, 1.9>, <46.6, 1.2>, <46.6, 1.2>, <46.6, 0.4>, <46.2, 0.0>, <45.4, 0.0>, <45.4, 0.0>, <39.34, 0.0>, <34.3, 1.1>, <15.1, 3.5>, <15.1, 3.5>, <5.5, 4.7>, <4.6, 6.9>, <0.0, 6.9> sturm } #debug concat ( "Bounding box <", vstr (3, min_extent (Test_object), ", ", 0, 1), "> ... <", vstr (3, max_extent (Test_object), ", ", 0, 1), ">\n" ) #macro Test_inside (Obj, Pt) #debug concat ( "<", vstr (3, Pt, ", ", 0, 4), "> is ", #if (inside (Obj, Pt)) "inside.\n" #else "outside.\n" #end ) #end Test_inside (Test_object, 265 * y) Test_inside (Test_object, 264 * y) Test_inside (Test_object, 263 * y) Test_inside (Test_object, 50 * y) Test_inside (Test_object, <60, 264>) Test_inside (Test_object, <42.5, 263.5>) // Something to show: object { Test_object pigment { rgb 1 } } camera { location <0, 350, -600> look_at <0, 135, 0> right 4/3 * x angle 35 } light_source { <-1, 1, -1> * 10000, rgb 10/7 parallel point_at 1 }