已知两点和直线上的某点的Y值,求某点的x坐标
2013-07-24 09:56
751 查看
最近使用GDI绘图,绘制了不规则曲线和一条直线,需要填充直线和曲线的相交区域,这就需要计算它们的交点了。以下是应用数学几何代数上的知识,通过已知的两点获得直线公式,然后根据直线上某点的Y值,获得某点的x值,具体的代码如下:
//已知两点和直线上的某点的Y值,求某点的x坐标
private Point GetInsectPoint(Point pt1, Point pt2, int insectPtY)
{
Point pt = new Point();
try
{
float k = 0f;
if (pt1.X == pt2.X)//不存在斜率x=x1为直线方程90度
{
pt.X = pt1.X;
pt.Y = insectPtY;
return pt;
}
else if (pt1.Y == pt2.Y && pt1.Y != insectPtY)//y=y1为直线方程,0度,两条直线平行没有交点
{
return pt;
}
else if (pt1.Y == pt2.Y && pt1.Y == insectPtY)//0度,两条直线重合,任意点即为交点
{
pt.X = pt1.X;
pt.Y = insectPtY;
return pt;
}
else
{
k = (float)(pt2.Y - pt1.Y) /(float) (pt2.X - pt1.X);
float b = pt1.Y - k * pt1.X;
float x = (insectPtY - b) / k;
pt.X = (int)x;
pt.Y = insectPtY;
}
}
catch (Exception ex)
{
Trace.WriteLine(ex, "通过两点计算直线公式失败:" + ex.Message);
}
return pt;
}
//已知两点和直线上的某点的Y值,求某点的x坐标
private Point GetInsectPoint(Point pt1, Point pt2, int insectPtY)
{
Point pt = new Point();
try
{
float k = 0f;
if (pt1.X == pt2.X)//不存在斜率x=x1为直线方程90度
{
pt.X = pt1.X;
pt.Y = insectPtY;
return pt;
}
else if (pt1.Y == pt2.Y && pt1.Y != insectPtY)//y=y1为直线方程,0度,两条直线平行没有交点
{
return pt;
}
else if (pt1.Y == pt2.Y && pt1.Y == insectPtY)//0度,两条直线重合,任意点即为交点
{
pt.X = pt1.X;
pt.Y = insectPtY;
return pt;
}
else
{
k = (float)(pt2.Y - pt1.Y) /(float) (pt2.X - pt1.X);
float b = pt1.Y - k * pt1.X;
float x = (insectPtY - b) / k;
pt.X = (int)x;
pt.Y = insectPtY;
}
}
catch (Exception ex)
{
Trace.WriteLine(ex, "通过两点计算直线公式失败:" + ex.Message);
}
return pt;
}
相关文章推荐
- 已知两条直线上各两点坐标,求两条直线交点坐标
- 已知两点经纬度坐标,求其直线距离
- 已知两点坐标,求直线方程、距离其中一点距离为L的某点
- 已知A,B两点及C点(不在直线AB上)坐标,求在直线AB上距离A点距离为线段AC长度的点D坐标
- 已知两点坐标,求两点连成的直线中的某一点坐标
- 【POJ 1981】Circle and Points(已知圆上两点求圆心坐标)
- 已知圆弧上两点坐标和半径求圆心坐标的算法(C++)
- poj 2002 Squares (哈希+正方形已知相邻两点求另外两点的坐标)
- 检测两点所确定直线上的像素坐标
- 已知等边三角形的两点 求第三点的坐标 (转 )
- HALCON已知平面两点图像坐标和对应机械坐标求仿射变换矩阵
- 已知空间一点到另外两点直线的距离
- 已知两点坐标和半径求圆心坐标程序C++
- 已知直线上两点求直线的一般式方程
- 检测两点所确定直线上的像素坐标
- 已知空间一点到另外两点直线的距离
- 根据两点坐标及父视图绘制直线
- ORACLE 自定义函数实例,已知2点坐标求直线距离
- 已知两点坐标,计算汽车行驶的方向【转】
- 根据点到已知坐标的两点的距离 获取该点坐标