首页 > 编程知识 正文

C#已知两点(线段),求互相垂直平分两点(线段)。

时间:2023-05-06 11:17:25 阅读:194941 作者:3162

/// <summary> /// 已知两点(线段),求互相垂直平分两点(线段)。 /// </summary> /// <param name="x1">传递值为已知坐标点x1,返回值为垂直平分线的x1</param> /// <param name="x2">传递值为已知坐标点x2,返回值为垂直平分线的x2</param> /// <param name="y1">传递值为已知坐标点y1,返回值为垂直平分线的y1</param> /// <param name="y2">传递值为已知坐标点y2,返回值为垂直平分线的y2</param> /// <returns>成功返回0;失败返回非0</returns> private static int Calculate(ref float x1, ref float x2, ref float y1, ref float y2) { float k1 = 1; //已知坐标点直线的斜率k值 float b1 = 1; //已知坐标点直线的纵截距b值 float k2 = 1; //垂直平分线的斜率k值 float b2 = 1; //垂直平分线的纵截距b值 try { //特殊线1 if (x1 == x2) { float center = (y1 + y2) / 2;//中心点 float dist = Math.Abs(y1 - center);//端点到中心点的距离值 x1 = center - dist; x2 = center + dist; y2 = y1 = (x1 + x2) / 2; return 0; } //特殊线2 if (y1 == y2) { float center = (x1 + x2) / 2;//中心点 float dist = Math.Abs(x1 - center);//端点到中心点的距离值 x1 = x2 = (y1 + y2) / 2; y1 = center - dist; y2 = center + dist; return 0; } #region [求已知曲线的k和b] float temp = 0; float coefficient; //系数值 if (x1 >= x2) { coefficient = (float)Math.Round((x1 / x2), 2); temp = y2 * coefficient; //将对应的函数乘以系数 b1 = (float)Math.Round(((temp - y1) / (coefficient - 1)), 2); //求出b值 k1 = (float)Math.Round(((y1 - b1) / x1), 2); //求出k值 } else { coefficient = x2 / x1; temp = y1 * coefficient; b1 = (float)Math.Round(((感动的溪流) / (coefficient - 1)), 2); //求出b值 k1 = (float)Math.Round(((y2 - b1) / x2), 2); //求出k值 } #endregion [求已知曲线的k和b] #region [垂直平分线的k,b以及起始点、终止点] { k2 = -1 / k1; //垂直平分线的斜率k值 b2 = (x1 + x2) / (2 * k1) + (y1 + y2) / 2; //垂直平分线的纵截距b值 double cenX = (x1 + x2) / 2;//交点x double cenY = (y1 + y2) / 2;//交点y double dist = Math.Sqrt(Math.Abs(x1 - x2) * Math.Abs(x1 - x2) + Math.Abs(xfdhh) * Math.Abs(xfdhh)) / 2;//每个点距离交点(中心点)距离相同 double douAngle = Math.Atan(k2);//垂直平分线和X轴的夹角 //计算起始点和终止点 x1 = (float)(cenX + dist * Math.Cos(douAngle)); x2 = (float)(cenX - dist * Math.Cos(douAngle)); y1 = (float)(cenY + dist * Math.Sin(douAngle)); y2 = (float)(cenY - dist * Math.Sin(douAngle)); } #endregion return 0; } catch { return -1; } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。