프로젝트에 필요하지만 유용한 것은 없습니다. 내가 찾은 최고의 기능은 opencv의 그리기 기능이지만 이전에 그린 원은 그대로 유지되므로 원을 왼쪽에서 오른쪽으로 이동하려면 선으로 끝납니다. 우리는 또한 아마도 뭔가 도움이 OpenGL을 사용합니다. 그리고 그것을 다른 이미지와 비교하기 위해 매트로 저장해야합니다.원을 만들려면 opencv 또는 opengl을 사용하여 원을 움직이거나 움직이십시오.
-4
A
답변
0
OpenGL과 관련하여 사용중인 OS 및 API에 대해 언급하지 않았습니다. 또한 반드시 필요한, 당신은 당신이 사용하는 OpenGL 버전을 언급하지 않았다. 아시다시피, 현대적인 접근 방식은 셰이더를 사용하는 것입니다. 내 대답은 간단하고 명료하게하기 위해 GLUT API를 사용하여 오래된 OpenGL을 사용합니다. 먼저 아무것도없는 원하지만 다음의 식
(Xcenter + radius*cos(angle), Ycenter + radius*sin(angle))
에 따라 점의 무리를 생성 할 필요는 OpenGL에서 원 운동을 애니메이션하려면 키보드의 키에 의해인지 원을 이동하려는 경우 또는 다른 방법을 사용한다면 원의 중심 (예 : Xcenter 및 Ycenter)을 업데이트해야합니다. 다음 예제에서는 키보드 화살표 키에 따라 원을 이동합니다.
는 그리고 이것은 코드입니다.
#include <cmath>
#include <vector>
#include "glut.h"
class Circle
{
public:
Circle();
void draw() const;
inline void moveUP() { m_cenY += 0.05f; refillCircPoints(); }
inline void moveDOWN() { m_cenY -= 0.05f; refillCircPoints(); }
inline void moveLEFT() { m_cenX -= 0.05f; refillCircPoints(); }
inline void moveRIGHT() { m_cenX += 0.05f; refillCircPoints(); }
private:
float m_cenX, m_cenY, m_radius;
std::vector<float> circlePoints;
void refillCircPoints();
};
Circle::Circle() : m_cenX(0.0f), m_cenY(0.0f), m_radius(0.1f)
{
for (float angle(0); angle < 0.0174533f*360.0f; angle += 0.0174533f*0.1f){
circlePoints.push_back(m_cenX + m_radius*cos(angle));
circlePoints.push_back(m_cenY + m_radius*sin(angle));
}
}
void Circle::refillCircPoints()
{
circlePoints.clear();
for (float angle(0); angle < 0.0174533f*360.0f; angle += 0.0174533f*0.1f){
circlePoints.push_back(m_cenX + m_radius*cos(angle));
circlePoints.push_back(m_cenY + m_radius*sin(angle));
}
}
void Circle::draw() const
{
for (unsigned int i(0); i < circlePoints.size(); i+=2){
glBegin(GL_POINTS);
glVertex3f(circlePoints[i],circlePoints[i+1],0.0);
glEnd();
}
}
Circle myCircle;
void display(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
myCircle.draw();
glutSwapBuffers();
}
void glutSpecialInput(int key, int x, int y);
void glutIdle();
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("GLUT Window");
glutDisplayFunc(display);
glutSpecialFunc(glutSpecialInput);
glutIdleFunc(glutIdle);
glutMainLoop();
return 0;
}
void glutIdle()
{
glutPostRedisplay();
}
void glutSpecialInput(int key, int x, int y)
{
switch(key)
{
case GLUT_KEY_UP:
myCircle.moveUP();
break;
case GLUT_KEY_DOWN:
myCircle.moveDOWN();
break;
case GLUT_KEY_LEFT:
myCircle.moveLEFT();
break;
case GLUT_KEY_RIGHT:
myCircle.moveRIGHT();
break;
}
}
관련 문제
- 1. OpenGL을 사용하여 안드로이드에 원을 그립니다.
- 2. OpenGL을 사용하여 원을 하나의 정점 배열로 채운다.
- 3. opencv HoughCircles를 사용하여 외부 원을 감지했습니다.
- 4. houghCircles (OpenCV)를 사용하여 작은 원을 감지했습니다.
- 5. 다른 원을 중심으로 원을 회전
- 6. 원을 사용하여 삼각형 그리기
- 7. 장치 크기에 따라 비례하여 원을 그린다 opencv?
- 8. OpenGL을 사용하여 타원이나 원을 그릴 때 몇 개의 정점을 사용해야합니까?
- 9. OpenCV C++ : 이미지의 모든 원을 찾는 방법
- 10. OpenCV : CV_16UC1 매트에 흰색 (!) 원을 그리십시오.
- 11. C의 OpenCV - 이미지의 위쪽에만 표시되어야하는 원을 그립니다.
- 12. 중앙 원을 중심으로하는 모든 원을 찾는 방법
- 13. jQuery/HTML5를 사용하여 원을 애니메이션화하십시오.
- 14. 마우스 이벤트 (Opencv)를 사용하여 이미지에 원을 그려야합니다.
- 15. 순수 CSS를 사용하여 div (직사각형) 안에 투명한 원을 만들려면 어떻게해야합니까?
- 16. 석영을 사용하여 클릭하면 원을 그립니다.
- 17. PIXI.js와 Typescript를 사용하여 원을 애니메이션하기
- 18. matplotlib를 사용하여 그래프에 원을 그리기
- 19. 카이로를 사용하여 파이썬에서 원을 그리기
- 20. 자바의 라인을 사용하여 원을 그리기
- 21. MouseListener를 사용하여 원을 그립니 까?
- 22. 처음부터 큰 원을 그리시오
- 23. 원을 양식화하는 방법은 무엇입니까?
- 24. OpenTK 나는 C#에서 OpenGL을 간단한 원을 그리려는 투명 원
- 25. 이미지에서 원을 감지하는 알고리즘
- 26. 내부 원을 피하면서 이미지에서 원을 어떻게 찾을 수 있습니까?
- 27. 원을 티타늄의 세그먼트로 나눕니다.
- 28. 정확하게 원을 감지하는 방법
- 29. MATLAB에서 겹쳐진 원을 제거하십시오.
- 30. opencv를 사용하여 단색의 흰색 원을 감지 HoughCircles
당신은 사용해 볼 수 있습니다 [이] (http://docs.opencv.org/2.4/doc/tutorials/introduction/display_image/display_image.html). 원 크기를 늘리거나 줄이는 창에 슬라이딩 바를 추가 할 수 있습니다. –
하지만 서클을 옮겨서 크기를 조정하지 않겠습니다. – Dario
그런 다음 [this] (http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html#circle)을 사용하고 슬라이딩 바를 사용하여 센터를 변경하십시오. –