C# 如何仅在绘图时显示鼠标坐标?

C# 如何仅在绘图时显示鼠标坐标?,c#,winforms,graphics,C#,Winforms,Graphics,如果我绘制了一个函数,如y=sin(x),那么我如何才能仅在鼠标位于函数的直线上时显示鼠标坐标?大概您已经通过计算值并绘制曲线绘制了sin(x)。因此,例如,当x=27时,y将是某个已知值。然后你用sin(0)在窗口的某个x,y坐标处绘制曲线。在角度x和屏幕上的x坐标之间,以及sin(x)的结果和屏幕上的y坐标之间有一些映射 例如,假设您为0到180之间的所有值生成了sin(x)。结果的范围为-1到+1。您有以下映射: xCoordinate = (int)(2*x); yCoordinate

如果我绘制了一个函数,如
y=sin(x)
,那么我如何才能仅在鼠标位于函数的直线上时显示鼠标坐标?

大概您已经通过计算值并绘制曲线绘制了
sin(x)
。因此,例如,当
x=27
时,
y
将是某个已知值。然后你用
sin(0)
在窗口的某个
x,y
坐标处绘制曲线。在角度
x
和屏幕上的
x
坐标之间,以及
sin(x)
的结果和屏幕上的
y
坐标之间有一些映射

例如,假设您为0到180之间的所有值生成了
sin(x)
。结果的范围为-1到+1。您有以下映射:

xCoordinate = (int)(2*x);
yCoordinate = (int)((100*y) + 200);
现在,如果要查看鼠标是否在曲线上,则需要将鼠标当前的
x
坐标转换回某个角度。您可以通过反转您的翻译来实现这一点:

x = xCoordinate/2;
现在,再次计算
sin(x)
,并使用平移来确定
y
坐标。将结果与鼠标当前的
y
坐标进行比较。如果它们相等,那么你就在曲线上


我之所以使用cast to
int
,是因为否则会得到分数值,并且鼠标坐标始终是整数。因此,对
y
坐标的计算可能会得出
sin(45)
的270.71。如果我画一个像sin(x)这样的函数,我怎么能只在鼠标在直线上时显示坐标?
y=sin(x)
是一个连续函数。此外,在绘制函数时,还需要缩放结果。因此,您应该描述如何绘制函数,以及要在哪些点上显示坐标。我假设您有一个
PointF[]
数组,那么您想只针对这些点进行测试吗?如果您已绘制到位图中,则可以使用bmp.GetPixel进行测试。如果在绘制事件中绘制,请使用Jim的分析方法。在任何其他情况下(例如,如果您使用control.CreateGraphics()),您的绘图都是错误的,应该首先纠正错误。)