C语言做图形交互,如何使鼠标的动作转化为杆cue的移动并用图形画出来?

double mousex1 = -1;
double mousey1 = -1;
double mousex2 = -1;
double mousey2 = -1;
double force = 0;
double theta = 0;

void myMouse(int x, int y, int button, int event)
{
	uiGetMouse(x,y,button,event);
	
	switch(button)
	{
		case LEFT_BUTTON:
			if(event==BUTTON_DOWN || event==MOUSEMOVE)
		    { 
		        if ( mousex1 == -1 && mousey1 == -1)
				{
				    mousex1 = x;
				    mousey1 = y;
				    
	                DrawCue(5,3.5,0);
	                Sleep(500);
				}
		    }
		    else if(event==BUTTON_UP)
		    {
		    	if ( mousex2 == -1 && mousey2 == -1 &&  mousex1 != -1 )
		        {
		        	mousex2 = x;
				    mousey2 = y;
				    getforce(abs(mousex2-mousex1),abs(mousey2-mousey1));
		            DisplayClear();
	             	DrawPoolTable(); 
	                DrawCue(5-abs(mousex2-mousex1),3.5,0);
	                Sleep(500);
				    mousex1 = -1;
				    mousey1 = -1;
		        	mousex2 = -1;
				    mousey2 = -1;
		        }
		    }
		break;
	}
}

void getforce(double dx, double dy)
{
	force = dx*dy + dy*dy;
	theta = atan(dx/dy);
}

​

 

你的代码已经正确的捕获了鼠标的移动,并将移动转换为了力和角度。这个力和角度可以被用来移动cue。

你需要一个函数来根据这个力和角度来绘制cue。这个函数可以根据力和角度来计算cue的位置,并使用图形API来绘制cue。这个函数可以被称为DrawCue。假设你已经有一个API可以用来画线,那么DrawCue可以像下面这样写:

void DrawCue(double force, double theta) {
    double length = force;  // 假设力直接决定cue的长度
    double cueX1 = 5, cueY1 = 3.5;  // cue的初始位置
    double cueX2 = cueX1 + length * cos(theta);  // cue的结束位置
    double cueY2 = cueY1 + length * sin(theta);

    // 假设你有一个叫DrawLine的函数可以画线
    DrawLine(cueX1, cueY1, cueX2, cueY2);
}

这个函数根据力和角度来计算cue的结束位置,然后使用这个结束位置和初始位置来绘制cue。这样你就可以在每次鼠标移动时更新cue的位置,并在屏幕上画出来。