# Revision history [back]

### calculating angle between two lines

I am working on a research project to detect and track hand, then move objects according to hand's motion. I need to calculate the angle between a horizontal axis and the centroid of hand, and update the angle every time the hand move. I implemented code, but it doesn't calculate the angle properly. The output angle has a repeated values i.e (114, -114, 57, 0, -57) and the single value is repeated for several frames, even if i moved my hand.

Here is the code :-

if (dArea > 10000) { //calculate the position of hand int posX = dM10 / dArea; int posY = dM01 / dArea; if (iLastX >= 0 && iLastY >= 0 && posX >= 0 && posY >= 0) { line(imgLines, Point(200, 200), Point(400, 200), Scalar(255), 2, 8, 0); line(imgLines, Point(200, 200), Point(posX, posY), Scalar(0, 0, 255), 2, 8, 0);

        }
int x1 = 400;
int y1 = 200;
int x2 = posX;
int y2 = posY;
int X = x2 - x1;
int Y = y2 - y1;
int x = pow((double)X, 2); //type casting from int to double
int y = pow((double)Y, 2);
int d = abs(sqrt((double)x + (double)y));
int angleInDegree = angleInRadian * 180 / M_PI; //angle in degree
if (angleInDegree < 0) {
angleInDegree += 2 * M_PI;
}
string Result;          // string which will contain the result

ostringstream convert;   // stream used for the conversion

convert << angleInDegree;      // insert the textual representation of 'Number' in the characters in the stream

Result = convert.str();
putText(imgOriginal, Result, Point2f(iLastX, iLastY), FONT_HERSHEY_PLAIN, 2, Scalar(0, 0, 255, 255));
iLastX = posX;
iLastY = posY;
}

• How to calculate the angle properly?
• how to keep only the last line and erase the previous ones?

C:\fakepath\angle.PNG

### calculating angle between two lines

I am working on a research project to detect and track hand, then move objects according to hand's motion. I need to calculate the angle between a horizontal axis and the centroid of hand, and update the angle every time the hand move. I implemented code, but it doesn't calculate the angle properly. The output angle has a repeated values i.e (114, -114, 57, 0, -57) and the single value is repeated for several frames, even if i moved my hand.

Here is the code :-

 if (dArea > 10000)
{
//calculate the position of hand
int posX = dM10 / dArea;
int posY = dM01 / dArea;
if (iLastX >= 0 && iLastY >= 0 && posX >= 0 && posY >= 0)
{
line(imgLines, Point(200, 200), Point(400, 200), Scalar(255), 2, 8, 0);
line(imgLines, Point(200, 200), Point(posX, posY), Scalar(0, 0, 255), 2, 8, 0); 0);

}
int x1 = 400;
int y1 = 200;
int x2 = posX;
int y2 = posY;
int X = x2 - x1;
int Y = y2 - y1;
int x = pow((double)X, 2); //type casting from int to double
int y = pow((double)Y, 2);
int d = abs(sqrt((double)x + (double)y));
int angleInDegree = angleInRadian * 180 / M_PI; //angle in degree
if (angleInDegree < 0) {
angleInDegree += 2 * M_PI;
}
string Result;          // string which will contain the result

ostringstream convert;   // stream used for the conversion

convert << angleInDegree;      // insert the textual representation of 'Number' in the characters in the stream

Result = convert.str();
putText(imgOriginal, Result, Point2f(iLastX, iLastY), FONT_HERSHEY_PLAIN, 2, Scalar(0, 0, 255, 255));
iLastX = posX;
iLastY = posY;
}
How to calculate the angle properly? how to keep only the last line and erase the previous ones?  C:\fakepath\angle.PNG 


 3 None updated 2018-01-18 12:19:28 -0500 calculating angle between two lines I am working on a research project to detect and track hand, then move objects according to hand's motion. I need to calculate the angle between a horizontal axis and the centroid of hand, and update the angle every time the hand move. I implemented code, but it doesn't calculate the angle properly. The output angle has a repeated values i.e (114, -114, 57, 0, -57) and the single value is repeated for several frames, even if i moved my hand. Here is the code :- if (dArea > 10000) { //calculate the position of hand int posX = dM10 / dArea; int posY = dM01 / dArea; if (iLastX >= 0 && iLastY >= 0 && posX >= 0 && posY >= 0) { line(imgLines, Point(200, 200), Point(400, 200), Scalar(255), 2, 8, 0); line(imgLines, Point(200, 200), Point(posX, posY), Scalar(0, 0, 255), 2, 8, 0); } int x1 = 400; int y1 = 200; int x2 = posX; int y2 = posY; int X = x2 - x1; int Y = y2 - y1; int x = pow((double)X, 2); //type casting from int to double int y = pow((double)Y, 2); int d = abs(sqrt((double)x + (double)y)); int angleInRadian = atan2(Y,X); //angle in radian int angleInDegree = angleInRadian * 180 / M_PI; //angle in degree if (angleInDegree < 0) { angleInDegree += 2 * M_PI; } string Result; // string which will contain the result ostringstream convert; // stream used for the conversion convert << angleInDegree; // insert the textual representation of 'Number' in the characters in the stream Result = convert.str(); putText(imgOriginal, Result, Point2f(iLastX, iLastY), FONT_HERSHEY_PLAIN, 2, Scalar(0, 0, 255, 255)); iLastX = posX; iLastY = posY; } How to calculate the angle properly? how to keep only the last line and erase the previous ones? C:\fakepath\angle.PNG 4 None updated 2018-01-18 13:24:32 -0500 LBerger 9104 ●1 ●17 ●82 http://perso.univ-lema... calculating angle between two lines I am working on a research project to detect and track hand, then move objects according to hand's motion. I need to calculate the angle between a horizontal axis and the centroid of hand, and update the angle every time the hand move. I implemented code, but it doesn't calculate the angle properly. The output angle has a repeated values i.e (114, -114, 57, 0, -57) and the single value is repeated for several frames, even if i moved my hand. Here is the code :- if (dArea > 10000) { //calculate the position of hand int posX = dM10 / dArea; int posY = dM01 / dArea; if (iLastX >= 0 && iLastY >= 0 && posX >= 0 && posY >= 0) { line(imgLines, Point(200, 200), Point(400, 200), Scalar(255), 2, 8, 0); line(imgLines, Point(200, 200), Point(posX, posY), Scalar(0, 0, 255), 2, 8, 0); } int x1 = 400; int y1 = 200; int x2 = posX; int y2 = posY; int X = x2 - x1; int Y = y2 - y1; int x = pow((double)X, 2); //type casting from int to double int y = pow((double)Y, 2); int d = abs(sqrt((double)x + (double)y)); int angleInRadian = atan2(Y,X); //angle in radian int angleInDegree = angleInRadian * 180 / M_PI; //angle in degree if (angleInDegree < 0) { angleInDegree += 2 * M_PI; } string Result; // string which will contain the result ostringstream convert; // stream used for the conversion convert << angleInDegree; // insert the textual representation of 'Number' in the characters in the stream Result = convert.str(); putText(imgOriginal, Result, Point2f(iLastX, iLastY), FONT_HERSHEY_PLAIN, 2, Scalar(0, 0, 255, 255)); iLastX = posX; iLastY = posY; } How to calculate the angle properly? how to keep only the last line and erase the previous ones? C:\fakepath\angle.PNG 


 Copyright OpenCV foundation, 2012-2018. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license. about | faq | help | privacy policy | terms of service Powered by Askbot version 0.10.2 Please note: OpenCV answers requires javascript to work properly, please enable javascript in your browser, here is how //IE fix to hide the red margin var noscript = document.getElementsByTagName('noscript')[0]; noscript.style.padding = '0px'; noscript.style.backgroundColor = 'transparent'; askbot['urls']['mark_read_message'] = '/s/messages/markread/'; askbot['urls']['get_tags_by_wildcard'] = '/s/get-tags-by-wildcard/'; askbot['urls']['get_tag_list'] = '/s/get-tag-list/'; askbot['urls']['follow_user'] = '/followit/follow/user/{{userId}}/'; askbot['urls']['unfollow_user'] = '/followit/unfollow/user/{{userId}}/'; askbot['urls']['user_signin'] = '/account/signin/'; askbot['urls']['getEditor'] = '/s/get-editor/'; askbot['urls']['apiGetQuestions'] = '/s/api/get_questions/'; askbot['urls']['ask'] = '/questions/ask/'; askbot['urls']['questions'] = '/questions/'; askbot['settings']['groupsEnabled'] = false; askbot['settings']['static_url'] = '/m/'; askbot['settings']['minSearchWordLength'] = 4; askbot['settings']['mathjaxEnabled'] = false; askbot['settings']['sharingSuffixText'] = ''; askbot['settings']['errorPlacement'] = 'after-label'; askbot['data']['maxCommentLength'] = 800; askbot['settings']['editorType'] = 'markdown'; askbot['settings']['commentsEditorType'] = 'rich\u002Dtext'; askbot['messages']['askYourQuestion'] = 'Ask Your Question'; askbot['messages']['questionSingular'] = 'question'; askbot['messages']['answerSingular'] = 'answer'; askbot['messages']['acceptOwnAnswer'] = 'accept or unaccept your own answer'; askbot['messages']['followQuestions'] = 'follow questions'; askbot['settings']['allowedUploadFileTypes'] = [ "jpg", "jpeg", "gif", "bmp", "png", "tiff" ]; askbot['data']['haveFlashNotifications'] = true; askbot['data']['activeTab'] = 'questions'; askbot['settings']['csrfCookieName'] = 'csrftoken'; askbot['data']['searchUrl'] = ''; /*<![CDATA[*/ $('.mceStatusbar').remove();//a hack to remove the tinyMCE status bar$(document).ready(function(){ // focus input on the search bar endcomment var activeTab = askbot['data']['activeTab']; if (inArray(activeTab, ['users', 'questions', 'tags', 'badges'])) { var searchInput = $('#keywords'); } else if (activeTab === 'ask') { var searchInput =$('#id_title'); } else { var searchInput = undefined; animateHashes(); } if (searchInput) { searchInput.focus(); putCursorAtEnd(searchInput); } var haveFullTextSearchTab = inArray(activeTab, ['questions', 'badges', 'ask']); var haveUserProfilePage = $('body').hasClass('user-profile-page'); if ((haveUserProfilePage || haveFullTextSearchTab) && searchInput && searchInput.length) { var search = new FullTextSearch(); askbot['controllers'] = askbot['controllers'] || {}; askbot['controllers']['fullTextSearch'] = search; search.setSearchUrl(askbot['data']['searchUrl']); if (activeTab === 'ask') { search.setAskButtonEnabled(false); } search.decorate(searchInput); } else if (activeTab === 'tags') { var search = new TagSearch(); search.decorate(searchInput); } if (askbot['data']['userIsAdminOrMod']) {$('body').addClass('admin'); } if (askbot['settings']['groupsEnabled']) { askbot['urls']['add_group'] = "/s/add-group/"; var group_dropdown = new GroupDropdown(); $('.groups-dropdown').append(group_dropdown.getElement()); } var userRep =$('#userToolsNav .reputation'); if (userRep.length) { var showPermsTrigger = new ShowPermsTrigger(); showPermsTrigger.decorate(userRep); } }); if (askbot['data']['haveFlashNotifications']) { $('#validate_email_alert').click(function(){notify.close(true)}) notify.show(); } var langNav =$('.lang-nav'); if (langNav.length) { var nav = new LangNav(); nav.decorate(langNav); } /*]]>*/ //todo - take this out into .js file $(document).ready(function(){$('div.revision div[id^=rev-header-]').bind('click', function(){ var revId = this.id.substr(11); toggleRev(revId); }); lanai.highlightSyntax(); }); function toggleRev(id) { var arrow = $("#rev-arrow-" + id); var visible = arrow.attr("src").indexOf("hide") > -1; if (visible) { var image_path = '/m/default/media/images/expander-arrow-show.gif?v=6'; } else { var image_path = '/m/default/media/images/expander-arrow-hide.gif?v=6'; } image_path = image_path + "?v=6"; arrow.attr("src", image_path);$("#rev-body-" + id).slideToggle("fast"); } for (url_name in askbot['urls']){ askbot['urls'][url_name] = cleanUrl(askbot['urls'][url_name]); }