Difference between revisions of "Talk:IsPointInPolygon2D"
(New page: '''Very nice''', would be superb if the creator could put it under the geometric library, but I am not putting anyone under pressure to do so. Just would be better in my honest opinion if ...) |
|||
Line 1: | Line 1: | ||
'''Very nice''', would be superb if the creator could put it under the geometric library, but I am not putting anyone under pressure to do so. Just would be better in my honest opinion if all these useful functions would be put under a general heading instead of splattered into their own pages. --[[User:Nexii Malthus|Nexii Malthus]] 16:11, 18 August 2008 (PDT) | '''Very nice''', would be superb if the creator could put it under the geometric library, but I am not putting anyone under pressure to do so. Just would be better in my honest opinion if all these useful functions would be put under a general heading instead of splattered into their own pages. --[[User:Nexii Malthus|Nexii Malthus]] 16:11, 18 August 2008 (PDT) | ||
:It can be included but not until it has been properly attributed and the license fulfilled. It is an illegal (since the licensing restriction were ignored) port of [http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html PNPOLY]. I've written a new port from the original C code, I just haven't tested it yet. | |||
<lsl>//Copyright (c) 1970-2003, Wm. Randolph Franklin | |||
//Copyright (c) 2008, Strife Onizuka (porting to LSL) | |||
// | |||
//Permission is hereby granted, free of charge, to any person obtaining a copy | |||
//of this software and associated documentation files (the "Software"), to deal | |||
//in the Software without restriction, including without limitation the rights | |||
//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
//copies of the Software, and to permit persons to whom the Software is | |||
//furnished to do so, subject to the following conditions: | |||
// | |||
// 1. Redistributions of source code must retain the above copyright notice, | |||
// this list of conditions and the following disclaimers. | |||
// 2. Redistributions in binary form must reproduce the above copyright | |||
// notice in the documentation and/or other materials provided with the | |||
// distribution. | |||
// 3. The name of W. Randolph Franklin may not be used to endorse or promote | |||
// products derived from this Software without specific prior written | |||
// permission. | |||
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |||
//SOFTWARE. | |||
integer isPointInPolygon2D(list vertx, list verty, float testx, float testy) | |||
{//Copyright (c) 1970-2003, Wm. Randolph Franklin; 2008, Strife Onizuka | |||
integer i = ~(polygon != []); | |||
integer c = 0; | |||
if(i < -2) | |||
{ | |||
float vxi = llList2Float(vertx, -1); | |||
float vyi = llList2Float(verty, -1); | |||
float vyj; | |||
do{ | |||
float vxj = vxi; | |||
vxi = llList2Float(vertx, i); | |||
if(((vyi = llList2Float(verty, i)) > testy) ^ ((vyj = vyi) > testy)) | |||
{ | |||
if(vyj != vyi) | |||
c = c ^ (testx < (((vxj - vxi) * (testy - vyi) / (vyj - vyi)) + vxi)); | |||
else//working around lack of infinity in LSL | |||
c = c ^ (0 < ((vxj-vxi) * (testy-vyi))); | |||
} | |||
}while (++i < nvert); | |||
} | |||
return c; | |||
} | |||
integer isPointInPolygon2D(list vert, vector test) | |||
{//Copyright (c) 1970-2003, Wm. Randolph Franklin; 2008, Strife Onizuka | |||
integer i = ~(polygon != []); | |||
integer c = 0; | |||
if(i < -2) | |||
{ | |||
vector vi = llList2Vector(vert, -1); | |||
do { | |||
vector vj = vi; | |||
vi = llList2Vector(vert, i); | |||
if((vi.y > test.y) ^ (vj.y > test.y)) | |||
{ | |||
if(vj.y != vi.y) | |||
c = c ^ (test.x < (((vj.x - vi.x) * (test.y - vi.y) / (vj.y - vi.y)) + vi.x)); | |||
else//working around lack of infinity in LSL | |||
c = c ^ (0 < ((vj.x-vi.x) * (test.y-vi.y))); | |||
} | |||
} while (++i < nvert); | |||
} | |||
return c; | |||
}</lsl> |
Revision as of 13:37, 19 August 2008
Very nice, would be superb if the creator could put it under the geometric library, but I am not putting anyone under pressure to do so. Just would be better in my honest opinion if all these useful functions would be put under a general heading instead of splattered into their own pages. --Nexii Malthus 16:11, 18 August 2008 (PDT)
- It can be included but not until it has been properly attributed and the license fulfilled. It is an illegal (since the licensing restriction were ignored) port of PNPOLY. I've written a new port from the original C code, I just haven't tested it yet.
<lsl>//Copyright (c) 1970-2003, Wm. Randolph Franklin //Copyright (c) 2008, Strife Onizuka (porting to LSL) // //Permission is hereby granted, free of charge, to any person obtaining a copy //of this software and associated documentation files (the "Software"), to deal //in the Software without restriction, including without limitation the rights //to use, copy, modify, merge, publish, distribute, sublicense, and/or sell //copies of the Software, and to permit persons to whom the Software is //furnished to do so, subject to the following conditions: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimers. // 2. Redistributions in binary form must reproduce the above copyright // notice in the documentation and/or other materials provided with the // distribution. // 3. The name of W. Randolph Franklin may not be used to endorse or promote // products derived from this Software without specific prior written // permission.
//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR //IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, //FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE //AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER //LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, //OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE //SOFTWARE.
integer isPointInPolygon2D(list vertx, list verty, float testx, float testy) {//Copyright (c) 1970-2003, Wm. Randolph Franklin; 2008, Strife Onizuka
integer i = ~(polygon != []); integer c = 0; if(i < -2) { float vxi = llList2Float(vertx, -1); float vyi = llList2Float(verty, -1); float vyj; do{ float vxj = vxi; vxi = llList2Float(vertx, i); if(((vyi = llList2Float(verty, i)) > testy) ^ ((vyj = vyi) > testy)) { if(vyj != vyi) c = c ^ (testx < (((vxj - vxi) * (testy - vyi) / (vyj - vyi)) + vxi)); else//working around lack of infinity in LSL c = c ^ (0 < ((vxj-vxi) * (testy-vyi))); } }while (++i < nvert); } return c;
}
integer isPointInPolygon2D(list vert, vector test) {//Copyright (c) 1970-2003, Wm. Randolph Franklin; 2008, Strife Onizuka
integer i = ~(polygon != []); integer c = 0; if(i < -2) { vector vi = llList2Vector(vert, -1); do { vector vj = vi; vi = llList2Vector(vert, i); if((vi.y > test.y) ^ (vj.y > test.y)) { if(vj.y != vi.y) c = c ^ (test.x < (((vj.x - vi.x) * (test.y - vi.y) / (vj.y - vi.y)) + vi.x)); else//working around lack of infinity in LSL c = c ^ (0 < ((vj.x-vi.x) * (test.y-vi.y))); } } while (++i < nvert); } return c;
}</lsl>