[X, Y] = meshgrid(1:20, 1:20);
Z = randi([10, 50], 20^2, 1); 
ptCloud = pointCloud([X, Y, Z]);
uavPosition = [60 60 100];
distances = sqrt((ptCloud.Location(:,1) - uavPosition(1)).^2 + (ptCloud.Location(:,2) - uavPosition(2)).^2);
indices = distances < radius;
filteredPtCloud = select(ptCloud, indices);
distUAVFilteredCloud = sqrt((uavPosition(1)-filteredPtCloud.Location(:,1)).^2 +...
        (uavPosition(2)-filteredPtCloud.Location(:,2)).^2 +...
        (uavPosition(3)-filteredPtCloud.Location(:,3)).^2);
approxUAVElevation = mean(distUAVFilteredCloud);
[xGrid, yGrid] = meshgrid(linspace(min(filteredPtCloud.Location(:,1)), max(filteredPtCloud.Location(:,1)), 10), ...
        linspace(min(filteredPtCloud.Location(:,2)), max(filteredPtCloud.Location(:,2)), 10));
zGrid = repmat(uavPosition(3) - approxUAVElevation, size(xGrid));
plot3(uavPosition(1), uavPosition(2), uavPosition(3), 'ro', 'MarkerSize', 10, 'DisplayName', 'UAV Position');
surf(xGrid, yGrid, zGrid, 'FaceAlpha', 0.5, 'EdgeColor', 'none', 'DisplayName', 'Fitted Plane');
line([uavPosition(1), uavPosition(1)], [uavPosition(2), uavPosition(2)], [uavPosition(3), uavPosition(3) - approxUAVElevation], ...
        'Color', 'g', 'LineWidth', 2, 'DisplayName', sprintf('Elevation: %.2f', approxUAVElevation));
title('3D Visualization of Point Cloud, Plane, and UAV');