⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module.cs

📁 苏金明编写的《用VB.NET和VC#.NET开发交互式CAD系统》一书的源代码
💻 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 + -