Colouring patches from a voronoi tessalation
16 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
mbvoyager
am 18 Nov. 2022
Kommentiert: Bjorn Gustavsson
am 19 Nov. 2022
I want to color patches generated from a Voronoi tessellation. However, some of the elements stay white. You can see the midpoints and the elements in the first figure below. Some elements (patches) remain white.
In the second figure you can see the assumable reason for this, the elements corresponding to the outer points are not closed and therefore do not form a valid patch.
Do you guys have a solution for how I can color all patches? Maybe by closing the outer ones artificially?
Here is my MWE:
%MWE Voronoi tesselation cell colouring
sample_set = randn(100,2);
figure
[vMGFPoints, vMGFcells] = voronoin(sample_set);
[vMGFx, vMGFy] = voronoi(sample_set(:,1), sample_set(:,2));
hold on
color = randn(100,1);
for vcell = 1:length(sample_set)
patch(vMGFPoints(vMGFcells{vcell},2),vMGFPoints(vMGFcells{vcell},1), color(vcell))
plot(sample_set(vcell,2),sample_set(vcell,1),'k.')
end
plot(vMGFy,vMGFx, 'k')
colorbar_obj = colorbar;
colorbar_obj.Label.String = 'Weighting';
xlim([-3 3])
ylim([-3 3])
Generating this image:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1198518/image.png)
Zooming out shows this
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1198523/image.png)
3 Kommentare
Star Strider
am 18 Nov. 2022
It would be nice to have the missing data. I can’t run the code as posted.
Akzeptierte Antwort
mbvoyager
am 19 Nov. 2022
Bearbeitet: mbvoyager
am 19 Nov. 2022
1 Kommentar
Bjorn Gustavsson
am 19 Nov. 2022
You better test how this affect your results. One suggestion is to put your "dummy-points" further and further away and see if and how the effect varies. It should have a very small (I think even no) effect inside the outermost patches.
Weitere Antworten (1)
Star Strider
am 18 Nov. 2022
Bearbeitet: Star Strider
am 18 Nov. 2022
It may be possible to close the exterior of the plot using the boundary function. I was able to do that reasonably well with:
v1 = vMGFx(:); % Column Vector For 'boundary' Call
v2 = vMGFy(:); % Column Vector For 'boundary' Call
bidx = boundary(v1,v2, 0.95);
vxf = ismember(vMGFx, v1(bidx));
[r,cx] = find(vxf);
vyf = ismember(vMGFy, v2(bidx));
[r,cy] = find(vyf);
Vx = vMGFx(:,cx) % Boundary Points
Vy = vMGFx(:,cy) % Boundary Points
However, I do not understand your code well enough to incorporate these points into it. Also, since the data are random, it may be necessary to adjust the ‘shrink factor’ in the boundary call each time. (That would not be necessary with fixed values.)
I am not not certain how to use these results with the patch function to close the patch areas. It may require a separate patch call to use them. I will help as I can to work with you to solve this.
.
1 Kommentar
Siehe auch
Kategorien
Mehr zu Voronoi Diagram finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!