PDA

View Full Version : Corner/Edge Detection



KurtCob
04-09-2001, 01:32 AM
Hello guys,

Times ago I asked about a way to detect the corner, and some guys said that I have to measure the angle between the lines, (I made to vectors, one for each line, and then I taked the angle), but in this way the result was not good, does anyone know another way to detect the corner ?

Tnks
Best regards
Kurt

KurtCob
04-09-2001, 10:06 AM
????

KurtCob
04-11-2001, 02:20 AM
am I trying to do something that is impossible ???

Any help or tip will be apreciated.

Tnks
RGDS
Kurt

DaViper
04-11-2001, 02:25 AM
hmm what corner/edge do you want to detect???
If you are trying to detect a corner in your rendered buffer than it is getting pretty dirty, complicated and hmmm difficult.

Michael Steinberg
04-11-2001, 02:39 AM
Yeah, what do you want to do???

KurtCob
04-11-2001, 03:06 AM
Let's imagine that I have a cloud of points that describe my model, this model is structured in slices that are segment of lines, (polylines), now I want to know were are the corners in this polyline, you know, I have something like a curve, and in some place I have corners, and I want to detect these corners. Hope, I'm clear enough.

Thank you
Best regards

Kurt

KurtCob
04-11-2001, 03:09 AM
My corners is something like edges , sharp edges.

Tnks
RGDS
Kurt

DaViper
04-11-2001, 03:18 AM
hmm lets see if i got it.

You have your vertices and the lines which are connecting the vertices, and now you want to know which lines are in a plane and which lines are a corner of an object

[This message has been edited by DaViper (edited 04-11-2001).]

Michael Steinberg
04-11-2001, 03:54 AM
What's exactly the problem about it?

[This message has been edited by Michael Steinberg (edited 04-11-2001).]

KurtCob
04-11-2001, 04:18 AM
Yes , it is something like, do you want some picture ???

Tnks
RGDS

Kurt

DaViper
04-11-2001, 04:26 AM
just calcualte the normals of the 2 Polygon adjactet to each line. If the normals point in different directions you have a corner

KurtCob
04-11-2001, 04:33 AM
DaViper,

Do you want some picture ???

RGDS

Kurt

Michael Steinberg
04-11-2001, 04:36 AM
I wanna have a picture

KurtCob
04-11-2001, 04:43 AM
Look in your email.

DaViper
04-11-2001, 05:03 AM
yup send it to
schroll@lpr.e-technik.tu-muenchen.de

Michael Steinberg
04-11-2001, 05:26 AM
Now you have any three following points.

v1 = p2-p1;
v2 = p2-p3; // This is a simple flip because I want the angle to be near 0 degrees not near 180 degrees

cos(alpha) = (v1*v2)/(|v1|*|v2|)
alpha_degree = arcuscos(alpha);

if ( alpha_degree > max_degree ) {
// we've got a corner here
}

Well just wrote that down so I don't know if it's correct. Simply say that max_degree is 10 or so and you'll find the corners.

[This message has been edited by Michael Steinberg (edited 04-11-2001).]

[This message has been edited by Michael Steinberg (edited 04-11-2001).]

KurtCob
04-11-2001, 05:32 AM
Ok... I will try..

Tnks
RGDS

Kurt

Michael Steinberg
04-11-2001, 05:38 AM
Corrected my posting somewhat.

KurtCob
04-11-2001, 07:04 AM
Ok Michael,

So now, I want to create a new curve using the points that are the edges, in the method that you showed me, we have two vectors, how will I know witch of this is the point, that is the edge ?

Have you undertood my question ?

Tnks
RGDS

Kurt

KurtCob
04-11-2001, 07:11 AM
Hello,

I think I found the answer for my last question, P2 will be the point that the corner is, right ??

Tnks
RGDS

Kurt

Michael Steinberg
04-11-2001, 12:21 PM
Yes, p2 is the point on the corner (or not-corner)!

Please correct my line from

v2 = p2-p3;
to
v2 = p3-p2;

Michael Steinberg
04-11-2001, 12:22 PM
Yoi have to ensure the direction the vectors point into. My solution assumed p2 is following p1 and p3 is following p1, all in ONE order.

KurtCob
04-11-2001, 01:25 PM
Tnks Michael.

The fact is that I would be able to try just on friday, because I had a problem with my computer, then when I have the result, I will give you an answer, anyway thank you very much for ALL your help.

PS.: The final process will be like this :

v1 = p2-p1;
v2 = p3-p2; // This is a simple flip because I want the angle to be near 0 degrees not near 180 degrees

cos(alpha) = (v1*v2)/(|v1|*|v2|)
alpha_degree = arcuscos(alpha);

if ( alpha_degree > max_degree ) {
// we've got a corner here
}

arcuscos = what is this ? is the same as acos() ?

And the point that I have to use, in my new "curve", that will describe all the edges,is pt2 (off course, if it is an edge), please correct me if I´m wrong.

Best regards

Kurt

Michael Steinberg
04-11-2001, 01:44 PM
K, here's my final code snippet I believe... http://www.opengl.org/discussion_boards/ubb/smile.gif

v1 = p2-p1;
v2 = p3-p2;

alpha_cos = (v1*v2)/(|v1|*|v2|)
alpha_radians = acos(alpha_cos);
alpha_degrees = alpha_radians * 180 / pi; // convert from radians to degrees

if ( alpha_degree > max_degree ) {
// we've got a corner here
}



And the point that I have to use, in my new "curve", that will describe all the edges,is pt2 (off course, if it is an edge), please correct me if I´m wrong.

I don't completely understand what you mean with that.

No problem.

Michael Steinberg
04-11-2001, 01:48 PM
Just had the idea to an even better way doing that.

Consider 5 following points on your "curve".

Get the angles at point 2, 3 and 4. If the angle at point 3 is not near the average of the angles at point 2 and 4, you've got a corner here. This way you can argue with percents rather than a preset maximum angle. It still has some problems though... So try to stick with the first way... http://www.opengl.org/discussion_boards/ubb/smile.gif

04-25-2001, 03:20 AM
isn't that worth continuing ?