|
[x]
Posted via EE Mobile
|
||
Search, ask, and monitor your questions on the go with EE Mobile. Visit Experts Exchange from your mobile device and never be out of touch again. |
||
| Question |
|
[x]
Attachment Details
|
||
|
[x]
The Solution Rating System
|
||
With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.
Your Input Matters If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support. Thank you! |
||
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: |
bool polygon_c::outline_vertex(polygon_c* newpoly, doublePair prev, doublePair cur, doublePair next, double distance){
//Get vectors representing the lines
doublePair A = cur-prev;
doublePair B = next-cur;
//Calculate the offset vectors for the lines (rotate by 90degrees, divide by length to get unit perp vector, multiply by 'distance')
doublePair offsetA=doublePair(-A.y,A.x).unit()*distance;
doublePair offsetB=doublePair(-B.y,B.x).unit()*distance;
//Determine if the angle made by A-B is convex, concave, straight or reverse
double ang=A.angle(B);
//Clamp really small angles to zero
(abs(ang)<10e-5) && (ang=0);
//Straight, convex or concave?
if ((ang<0) || (prev==next)){ //Concave - return arc at 'distance' around cur starting from cur+offsetA, ending at cur+offsetB
//TODO : Draw arc
double incAng=PI2/18;
double angle;
double endAng;
//Add arc startpoints
newpoly->verts.push_back(cur+offsetA);
//For straight lines (IE prev==next), 'fix' the angle to account for lack of 'clockwiseness' in doubleback nodes
if (prev==next){ang=-PI;}
//Determine start and end angles
angle=atan2(offsetA.y, offsetA.x)-incAng;
endAng=(angle+ang)+incAng;
double points=ceil((endAng-angle)/incAng);
incAng=(endAng-angle)/points;
//Add arc
while (angle>endAng){
newpoly->verts.push_back(cur+doublePair(cos(angle)*distance,sin(angle)*distance));
angle-=incAng;
}
//Add the arc endpoint
newpoly->verts.push_back(cur+offsetB);
}else if (ang>0){ //Convex - return intersect(prev+offsetA->cur+offsetA, cur+offsetB->next+offsetB)
doublePair intersect=doublePair::line_intersect(prev+offsetA,cur+offsetA, cur+offsetB,next+offsetB);
newpoly->verts.push_back(intersect);
}else{ //Straigh line - return cur+offsetA
//Comment out to simplify the polygon
//newpoly->verts.push_back(cur+offsetA);
}
return true;
}
|
Advertisement
| Hall of Fame |