18

I'm trying to post this question to SO, but it keeps complaining that it

contains code that is not properly formatted as code

and I can't figure out why. Am I missing something, or is there a bug in the code-detection heuristic?

I've tried wrapping suspect phrases in inline code blocks with backticks, but to no avail. My question's source is:

I have a 2D plane, partitioned into n-sided, convex polygons. I'm using [WRF's PNPOLY algorithm][PNPOLY] for polygon inclusion to ensure that a point belongs inside one and only one polygon.

Is there an algorithm I can use to clip a line segment **PO** to a given polygon in the plane, assuming that `pnpoly(O) == true`, such that **pnpoly(P')** will always be true?

![polygon-segment clipping diagram][diagram]

My current implementation of clipToPoly does a line-line intersection test with the segment and each edge of the polygon, then uses the intersection point (as detailed in [this SO answer][intersection]), but this does not always yield a point that satisfies PNPOLY.

<!-- language: lang-js -->

    clipPointToPoly = function(p, o, poly) {
        var i, j, n = poly.length,
            q, r = {}, s = {}, pq = {},
            rxs, t, u;

        function cross2(v, w) {
            return v.x * w.y - v.y * w.x;
        }

        for (i = 0, j = n - 1; i < n; j = i++) {
            q = poly[i];
            s.x = poly[j].x - q.x;
            s.y = poly[j].y - q.y;

            r.x = o.x - p.x;
            r.y = o.y - p.y;

            rxs = cross2(r, s);
            if (rxs !== 0) {
                pq.x = q.x - p.x;
                pq.y = q.y - p.y;

                t = cross2(pq, s) / rxs;
                u = cross2(pq, r) / rxs;
                if (0 < u && u < 1 && 0 < t && t < 1) {
                    p.x = p.x + t * r.x;
                    p.y = p.y + t * r.y;
                    return true;
                }
            }
        }
        return false;
    };

I don't think I understand enough about the Simulation of Simplicity, or how to deal with PNPOLY's half-open sets when using floating point numbers to handle the edge cases properly.

**For example:**

    poly: [(1,1), (-1,1), (-1,-1), (1,-1)]
    p: (5,5)
    o: (0,0)
    p' = (1,1)

This fails because (1,1) is not included according to PNPOLY (it's on the open side of the set), but clipToPoly does not take that into account. I suppose I could nudge it by an epsilon if I knew it was on an open end of the set, but I'd prefer a more stable solution.

**Another example:**

    poly: [-995.9592341908675, -88.48705014724577
     -1040.5031753180106, -176.53192722405026
     -549.9211095905894, -330.8462151682281
     -653.7143990581328, -211.59193148034612]
    p: -1032.3773586525654, -208.3586379393678
    o: -957.4172402148379, -202.6668958854324

In this case, clipToPoly fails because **O** is so close to the edge of the polygon, it doesn't even detect an intersection due to floating point imprecision.

    t: 1.0000000000000002 u: 0.8306380503739466

Is there a way to get clipToPoly's floating point imprecision to match PNPOLY's, so that both are consistent?

[diagram]: https://i.stack.imgur.com/aI6Y2.png
[PNPOLY]: http://www.ecse.rpi.edu/~wrf/Research/Short_Notes/pnpoly.html
[intersection]: http://stackoverflow.com/a/565282/382431
9
  • 7
    1. I hate scrolling horizontally. 2. I hate scrolling vertically.
    – juergen d
    Aug 5, 2013 at 17:18
  • 1
    @juergen d: You can copy the input, paste it into the Answer field below, and see the live preview. You won't see any scrollbars then. Aug 5, 2013 at 17:19
  • Try posting it without indenting the paragraphs. Stack Overflow tries to format anything indented 4 spaces as code. Aug 5, 2013 at 17:21
  • 3
    @juergend I don't understand how I am supposed to post the source code for markdown without placing that code in a code block, thus requiring horizontal scrolling. And yes, 'source code' for markdown seems a bit odd, but that's essentially what it is.
    – JDS
    Aug 5, 2013 at 17:22
  • 2
    @Bill the Lizard: None of the paragraphs are being indented - the only things I see being indented are code snippets and output. Aug 5, 2013 at 17:25
  • @BoltClock'saUnicorn Weird. I see 4 spaces at the beginning of every paragraph except the first one. Aug 5, 2013 at 17:26
  • 2
    @Bill the Lizard: I'm gathering that's because the OP is providing the raw Markdown he's used to post the question, and that itself has to be indented for the purposes of this meta question. Aug 5, 2013 at 17:27
  • 2
    @juergend If I modify the text that's failing the SO code-detection parser, then it is no longer the text that's failing the SO code detection parser.
    – JDS
    Aug 5, 2013 at 17:28
  • 1
    @JDS: Yes, you're right. I did not get it at first.
    – juergen d
    Aug 5, 2013 at 17:29

2 Answers 2

10

The problem is with the Markdown image link

![polygon-segment clipping diagram][diagram]
...
[diagram]: https://i.stack.imgur.com/aI6Y2.png

The named reference-link seems to be the culprit. If I change it to a number, it passes the test:

![polygon-segment clipping diagram][1]
...
[1]: https://i.stack.imgur.com/aI6Y2.png

This does seem to be a bug in the SO code-detection parser, where it incorrectly identifies image reference-links that use a string instead of a number as code.

-1

@JDS Me too. The problem was also with the Markdown image link. I fixed the error below by simple deleting a link:

"Your post appears to contain code that is not properly formatted as code. Please indent all code by 4 spaces using the code toolbar button or the CTRL+K keyboard shortcut. For more editing help, click the [?] toolbar icon."


simple fix:

enter image description here ^- Above is the same article with only one link (Images.xml). not two links as before (ImagesMinimal.xml and Images.xml).

With this posting has worked here: How to fix Shopware images import error - Ordernumber and image are required


Here you could see the error again (red box):

enter image description here


Hope this helps.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .