Subject: CGAL users discussion list
List archive
- From: Helios <>
- To:
- Subject: [cgal-discuss] cropping voronoi diagram to a bounded box using CGAL in python
- Date: Thu, 9 Mar 2023 20:23:47 +0530
- Authentication-results: mail2-smtp-roc.national.inria.fr; spf=None ; spf=Pass ; spf=None
- Ironport-data: A9a23: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
- Ironport-hdrordr: A9a23:9ghrlKMhIrtHIcBcT9D255DYdb4zR+YMi2TDiHoddfUFSKalfp 6V98jzjSWE7gr5K0tQ4OxoWZPwN080kKQY3WB/B8bHYOCLggqVxeJZnMLfKl/bakrDH4dmvM 8OHZSWY+eAbmSS+PyKhTVQZOxQouVvnprJuc7ui1NWCS16YaBp6Al0Ti6dD01NXQFDQbYpCZ aG4cJDhjy4PVAadN6yCHUpV/XK44SjruOsXTc2QzocrCWehzKh77D3VzCewxclSjtKhZsy7G TflAT9x6O799W20AXV2WP/54lf3PHh1txALsqRjdV9EESlti+YIKBaH5GStjE8p++irHwwls PXnhsmN8Nvr1vMY2Ccu3LWqkTd+Qdrz0Wn5U6TgHPlr8C8bik9EdB9iYVQdQacw1Y8vet7zL lA0wuixtZq5FL77WvADurzJlBXf3mP0DofeCko/j9iuL4lGfFsREokjQFo+dk7bWfHAcscYZ FT5YnnlY1rmBWhHjrkVyBUsaaRd2V2ERGcTkcYvMuJlzBQgXBi1kMdgNcSh3Ea6fsGOux5Ds n/Q9dVfYt1P70rRLM4AP1ETdq8C2TLTx6JOGWOIU7/HKVCP37WsZb47Lg8+envIfUzvewPsY WEVEkduX85ekroB8HL1JpX8grVSGH4WTj20MlR65Vwp7W5Trv2Ni+ITkwojqKb0oEiK9yeX+ z2NINdAvflI2erEYFV3xfmU50XMnUaWN19gKdKZ7tPmLO7FmTHjJ2lTB+IHsuRLd8NYBKCPl ITGD7uOc5H8kenHnflnRm5YQKSRnDC
- Ironport-phdr: A9a23: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
- Ironport-sdr: 6409f307_8hz0YjTJTOEMMWygWy6iuiM6Ul6ZeTOVLznKxa03bnWQ8A5 aQDiqsX4JwGwz6e+WsEi3mZVHuHKehENJXUId8A==
Respected sir/mam,
I'm using CGAL with python to draw Voronoi diagram. I would like to compute the set of edges that surround a particular site when the voronoi diagram is restricted to a box.
```
import numpy as np
from CGAL import CGAL_Kernel
from CGAL.CGAL_Voronoi_diagram_2 import Voronoi_diagram_2
from CGAL.CGAL_Triangulation_2 import Delaunay_triangulation_2
sites = np.array([[-3, 2], [-5, -3], [2,5], [0,5], [0,0]], dtype=float)
print("sites = ", sites,end="\n\n")
sites_cgal = [CGAL_Kernel.Point_2(x, y) for x, y in sites]
dt = Delaunay_triangulation_2()
dt.insert(sites_cgal)
vd = Voronoi_diagram_2(dt)
for f in vd.faces():
e = f.halfedge()
d = f.dual()
print('site = ', d.point())
s = [e.source().point().x(),e.source().point().y()] if e.has_source() else [None,None]
t = [e.target().point().x(),e.target().point().y()] if e.has_target() else [None,None]
print("edge : source = ",s,", target = ", t)
while True:
e = e.next()
sn = [e.source().point().x(),e.source().point().y()] if e.has_source() else [None,None]
tn = [e.target().point().x(),e.target().point().y()] if e.has_target() else [None,None]
if [s,t] == [sn,tn]:
break
else:
print("edge : source = ", sn,", target = ", tn)
print("\n")
```
I have written a program to compute the bounded edges around a particular site in anti-clockwise direction but I am unable to compute it in case of unbounded edges. In case of unbounded edges since souce or target is in infinity, to prevent the kernel from crashing I have printed them as `None`
I need to clip the unbounded edges that has source or target in infinity and then find the edges that it traverses along the bounding box for every site.
Or I would like to know if there is any other component other than source and target that is stored in the unbounded edge case that can be used to convert it into a ray or segment or something else.
Thank you
Regards
Sawvranu Dey
- [cgal-discuss] cropping voronoi diagram to a bounded box using CGAL in python, Helios, 03/09/2023
Archive powered by MHonArc 2.6.19+.