Question

I'm attempting to write a short mini-program in Python that plays around with force-based algorithms for graph drawing.

I'm trying to minimize the number of times lines intersect. Wikipedia suggests giving the lines an electrical charge so that they repel each other. I asked my physics teacher how I might simulate this, and she mentioned using calculus with Coulomb's Law, but I'm uncertain how to start.

Could somebody give me a hint on how I could do this? (Or alternatively, another way to tweak a force-based graph drawing algorithm to minimize the number of times the lines cross?) I'm just looking for a hint; no source code please.

In case anybody's interested, my source code and a youtube vid I made about it.

Was it helpful?

Solution

You need to explicitly include a term in your cost function that minimizes the number of edge crossings. For example, for every pair of edges that cross, you incur a fixed penalty or, if the edges are weighted, you incur a penalty that is the product of the two weights.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top