任意平面上的有界区域,做过其中一点与该平面相切的球。当球的半径越来越大时,球面上投射到该区域的部分越来越接近该区域。
所以我们可以用球去夹出一个多面体区域来。具体而言,对于每个多边形,首先确定其法线,然后选择充分大的半径,例如1000000,然后任选多边形上一点,计算在该点相切的球的球心。注意要让球心在多面体区域外。然后给所有实体添加tag,移除各个球内的实体tag即可。
例如:选择玩家视野前方±30°角内,高为10米的的正四棱锥区域内实体。
首先
- execute positioned ^ ^ ^-10000 run tag @e[distance=..10010] add temp
计算法线,例如OAB(逆时针方向向正四棱锥外),
|i j k |
|10 tan30° 0 10|=57.7 i-57.7 j -33.33 k=(57.7,-57.7,-33.33)
|0 -10 tan30° 10|
假设球心为 (17320.50808,-17320.50808,-10000),半径为26457.5131,于是
- execute positioned ^17320.50808 ^-17320.50808 ^-10000 run tag @e[distance=..26457.5131] remove temp
- execute positioned ^-17320.50808 ^-17320.50808 ^-10000 run tag @e[distance=..26457.5131] remove temp
- execute positioned ^17320.50808 ^17320.50808 ^-10000 run tag @e[distance=..26457.5131] remove temp
- execute positioned ^-17320.50808 ^17320.50808 ^-10000 run tag @e[distance=..26457.5131] remove temp
代码未经测试,如需使用请自行测试。