已知直线两点,如何直线上标识长度?
如:
1880米(如何标识)
______________________________而且标识必须与直线平行,在线的中间。
如:
1880米(如何标识)
______________________________而且标识必须与直线平行,在线的中间。
解决方案 »
- databing:system.data.datarowview 不包含列名“name”
- WebChartControl画饼图
- xml 操作的问题,急!!!请大虾们帮忙
- 在线等!如何把480*320的图像利用重采样转换成360*240的图像并显示出来?
- 奇怪的问题,有关数据库的
- 请问有没有专门的c#语法书籍看呀?
- C# vs2005制作水晶报表的问题 可以帮mm解决一下吗?
- C#如何实现定时启动程序?
- (WebForm)怎么显示一个动画。
- 最匹配的重载方法具有一些无效参数?这个怎么解决?
- 程序在其他机器上运行的时候冒出这个错误,知道的解释下原因和解决办法
- C# Media Player 如何播放一组文件
这样满足要求.
不知道是不是这个意思。
1.不一定在窗体上
2.画线,然后在线中间加上表示长度的文字说明。(因为线不一定水平,所以要保证字与线的平行)
不是这意思。因为线的方向不一定,而且要保证字与线的平行。
是的。标识也要画出来。
能给带代码吗?
根据画图,全画上去。
照猫画虎应该效果不差
先求出k和b
利用公式可以求出距它为s的另条直线y=kx+b2,然后.....
你应该也还有一个比例的吧!可以通过这个公式进行转换,在加上一个比例应该可以实现你所需的功能
你如果要比较大的转换的话,就不要用int用float或是double这们精度高 public class CommonSettings
{
/// <summary>
/// 把像素换算成毫米
/// </summary>
/// <param name="Pixel">多少像素</param>
/// <returns>多少毫米</returns>
public static float PixelConvertMillimeter(float Pixel)
{
return Pixel / 96 * 25.4f;
}
/// <summary>
/// 把毫米换算成像素
/// </summary>
/// <param name="Millimeter">多少毫米</param>
/// <returns>多少像素</returns>
public static int MillimeterConvertPixel(float Millimeter)
{
return ((int)(Millimeter / 25.4 * 96)+1);
}
}
private function getCrossPoint(l1,l2):Point{
var x:Number=(l1.b-l2.b)/(l2.k-l1.k);
var y= (l2.k*l1.b-l1.k*l2.b)/(l2.k-l1.k);
return new Point(x,y)
}
//画两垂直线的直角号
public function drawRightAngleNote(b1,b2,toPoint,nColor,nTrans){
var t1={k:b1.k,b:b1.b+10/Math.cos(Math.atan(b1.k))}
var t2={k:b2.k,b:b2.b+10/Math.cos(Math.atan(b2.k))}
var p1=getCrossPoint(t1,b2)
var p2=getCrossPoint(t1,t2)
var p3=getCrossPoint(t2,b1)
spCanvas.lineStyle(1, nColor, nTrans);
spCanvas.moveTo(p1.x,p1.y)
spCanvas.lineTo(p2.x,p2.y)
spCanvas.lineTo(p3.x,p3.y)
}
//由两点取得直线(y=kx+b)
public function getBeeLine(p1:Point,p2:Point):Object{
var x1=p1.x,x2=p2.x
var y1=p1.y,y2=p2.y
var k=(y2-y1)/(x2-x1)
var b=x1*(y1-y2)/(x2-x1)+y1
return {k:k,b:b}
}
你试着在看看吧!要看看三角函数方面的资料
-----------------------------
\此角
\
\
\
\
\
public Form4()
{
InitializeComponent();
//SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
//SetStyle(ControlStyles.ResizeRedraw, true);
} List<Point> Points = new List<Point>();
Point MovePoint; private void Form4_MouseDown(object sender, MouseEventArgs e)
{
if (Points.Count == 0)
{
Points.Add(e.Location);
MovePoint = new Point(e.X, e.Y);
}
else if (Points.Count == 1)
Points.Add(e.Location);
else if (Points.Count == 2)
{
Points.RemoveAt(0);
Points.RemoveAt(0);
}
} private void Form4_MouseMove(object sender, MouseEventArgs e)
{
if (Points.Count == 1)
MovePoint = new Point(e.X,e.Y);
this.Refresh();
} private void Form4_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
if (Points.Count == 1)
{
e.Graphics.DrawLine(new Pen(new SolidBrush(Color.Red)), Points[0], MovePoint);
}
else if (Points.Count == 2)
{
e.Graphics.DrawLine(new Pen(new SolidBrush(Color.Red)), Points[0], Points[1]);
int x = Points[1].X - Points[0].X;
int y = Points[1].Y - Points[0].Y; double z = Math.Sqrt(x * x + y * y); double zz = Math.Asin(y / z)*50;//值有问题! GraphicsState state = g.Save();
Matrix RotationTransform = new Matrix(1, 0, 0, 1, 1, 1); //rotation matrix
RotationTransform.RotateAt((float)zz, Points[0]);
g.Transform = RotationTransform;
g.TranslateTransform(0, x/2); g.DrawString("Test", new Font("vanda", 10), Brushes.Blue, Points[0]);
g.Restore(state);
}
}
}