How do I create a polygon with n sides with only 90 degree or 270 degree internal angles?

6 visualizaciones (últimos 30 días)
I am trying to programmaticaly generate L-shaped, T-shaped or Manhattan geometries for projecting these patterns. I have tried generating using polyshape boolean ops, and decsg functions from PDE toolbox, but I need more freedom to be able to break these geometries into segments which can be then individually manipulated. Essentially, I am trying to break these geometries into segments as shown in the figure (Figure citation courtesy: 1. Li, Y., Yu, S. M. & Li, Y. L. Intelligent optical proximity correction using genetic algorithm with model- and rule-based approaches. Comput. Mater. Sci. 45, 65–76 (2009).)
Any help/direction would be much approciated!

Respuestas (1)

John D'Errico
John D'Errico el 29 de Mayo de 2020
I guess I don't really see the problem. And I don't really see where you are going with this, but...
  1. Start with a library of every possible polygon with exactly 4 sides, and 90 degree angles. (Yes, there is only one of them. It is square.)
  2. Arbitrarily stretch the polygon in both directions, turning the square into a rectangle of random length and width.
  3. Next, you set up a while loop, that iterates until it gets bored or you decide it is done.
  4. Choose randomly to break either an edge of the polygon, or to break two consecutive edges of the polygon. You might choose the edge to break proportionally to the length of the edge. When you break an edge, you will replace the edge with 5 edges, where you bump the middle piece either in or out by some random amount, as long as it does not cause the polygon to become Catholic (i.e., one that crosses itself.)
  5. Continue the while loop until you are happy. If the goal is to have exactly n sides, then stop when the number of sides is exactly n.
Note that ALL polygons with only 90/270 degree internal angles will always have an even number of sides. If you break an edge, bumping some internal portion of the the edge in/out by some random amount, then you ALWAYS increase the number of sides by 4.
If you break two consecutive edges that share a common angle, it would seem this will typically increase the total number of sides by 2. So your while loop will just continue breaking edges until you reach the target total number of edges.
As I said, I don't see the real problem. You just need to watch out at the end, if your polygon currently has n-2 edges, that you don't want to increase that count by 4. But that is just an if statement to choose the last set of breaks.
The entire thing is a simple while loop though. Write a function that takes any polygon, and then breaks an indicated edge or corner as needed, then just loop.
  1 comentario
Dipankar Behera
Dipankar Behera el 29 de Mayo de 2020
Editada: Dipankar Behera el 29 de Mayo de 2020
Thanks John. But how can I specifically select and break an edge within Matlab, such that it has 5 edges and I can individually translate/rotate every edge to accomplish what's shown in the figure? This is where I am going with this:
Suppose I have the L shaped geometry which represents a projection lithography mask (can be physically achieved using projection optics). The diffraction limited resolution characteristics and proximity effects in the system lead to a large error between the projected L shaped pattern and the pattern obtained on the wafer. Hence, the L-shaped pattern is programmatically modified using empirical and simulation results to reduce that error. I am looking for a way to 1. generate these polygons 2. break up the edges into x number of parts 3. translate the edges using a set of rules 4. model and simulate using the modified geometry to quantify the error and repeat the process.

Iniciar sesión para comentar.

Categorías

Más información sobre Elementary Polygons en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by