📄 module.cs
字号:
using System;
using System.Drawing;
namespace 曲线求交
{
/// <summary>
/// Module 的摘要说明。
/// </summary>
public class Module
{
public Module()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public float[] LineLine(CLine line1, CLine line2)
{
float[] reValue={0,0,0};
float xx1,yy1,xx2,yy2;
float x1,y1,x2,y2;
float n1,n3,n4;
float n2=0;
if (line1.LBegin.X > line1.LEnd.X)
{
xx2 =line1.LBegin.X;
yy2 =line1.LBegin.Y;
xx1 =line1.LEnd.X;
yy1 =line1.LEnd.Y;
}
else
{
xx1 = line1.LBegin.X;
yy1 = line1.LBegin.Y;
xx2 = line1.LEnd.X;
yy2 = line1.LEnd.Y;
}
if (line2.LBegin.X > line2.LEnd.X)
{
x2 = line2.LBegin.X;
y2 = line2.LBegin.Y;
x1 = line2.LEnd.X;
y1 = line2.LEnd.Y;
}
else
{
x1 = line2.LBegin.X;
y1 = line2.LBegin.Y;
x2 = line2.LEnd.X;
y2 = line2.LEnd.Y;
}
float[] kc1= LineKX(new PointF(xx1, yy1), new PointF(xx2, yy2));
float[] kc2= LineKX(new PointF(x1, y1), new PointF(x2, y2));
//如果两条直线段的斜率相同
if (kc1[0] == kc2[0])
{
if (x1 > xx2 || x2 < xx1)
{
reValue[0] = 0;
}
else
{
n1 = y1 + (-x1) * kc1[0];
n1 = yy1 + (-xx1) * kc2[0];
if (n1 != n2)
{
reValue[0] = 0;
}
else
{
n3 = Math.Max(xx1, x1);
n4 = Math.Min(xx2, x2);
reValue[1] = n3;
reValue[2] = y1 + (n3 - x1) * kc1[0];
if (n3 == n4){reValue[0] = 1;}
reValue[3] = n4;
reValue[4] = y1 + (n4 - x1) * kc1[0];
reValue[0] = 2;
}
}
}
else
{
reValue[1] = (kc1[1] - kc2[1]) / (kc2[0] - kc1[0]);
reValue[2] = kc1[1] + reValue[1] * kc1[0];
//如果交点横坐标在两条直线段的横坐标范围内
if ((reValue[1] >= x1 && reValue[1] <= x2 &&
reValue[1] >= xx1 && reValue[1] <= xx2))
{
reValue[0] = 1;
}
else
{
reValue[0] = 0;
}
}
return reValue;
}
//计算直线段的截距式方程
public float[] LineKX(PointF pB,PointF pE)
{
float[] kc={0,0};
//若直线段不为竖直线段
if (pB.X != pE.X)
{
kc[0] = (pE.Y - pB.Y) / (pE.X - pB.X);
}
//如果是竖直线段
else
{
kc[0] = 10000;
}
//计算截距
kc[1] = pB.Y - kc[0] * pB.X;
return kc;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -