line 坐标问题

changmaohai1980 2009-10-19 03:50:56
在一个canvas上有一条直线。知道了开始坐标和结束坐标。。
请问如何计算出这条直线的所有坐标(也就是在这条直线的每个点的坐标。)?
...全文
199 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jv9 2009-10-20
  • 打赏
  • 举报
回复
可以计算出来。

public partial class MainPage : UserControl
{
private Point vector1 = new Point();
private Point vector2 = new Point();

public MainPage()
{
InitializeComponent();

vector1.X = 8;
vector1.Y = 10;
vector2.X = 0;
vector2.Y = 10;

writeVectors(vector1, vector2);
addVectors(vector1, vector2);
scaleVector(vector1, 2);
}

private void writeVectors(Point vectorA, Point vectorB)
{
msgBlock.Text = "Vector 1: " + vectorA;
msgBlock.Text += "\nVector 2: " + vectorB;
}

private void addVectors(Point vectorA, Point vectorB)
{
Point newVector = new Point();
newVector.X = vectorA.X + vectorB.X;
newVector.Y = vectorA.Y + vectorB.Y;
msgBlock.Text += "\nVector Addition: " + newVector;
}

private void scaleVector(Point vectorA, int scale)
{
Point newVector = new Point();
newVector.X = vectorA.X * scale;
newVector.Y = vectorA.Y * scale;
msgBlock.Text += "\nVector 1 Scaled by " + scale + ": " + newVector + "";
}
}
xingjunli 2009-10-20
  • 打赏
  • 举报
回复
<UserControl xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  x:Class="LoadSilverlight.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot">
<Canvas Background="Green" Margin="0,60,0,1" x:Name="drawCanvas"/>
<TextBox x:Name="txtS" Height="30" HorizontalAlignment="Left" Margin="29,11,0,0" VerticalAlignment="Top" Width="147" TextWrapping="Wrap" Text="50,50"/>
<TextBox x:Name="txtEnd" Height="30" Margin="224,11,259,0" VerticalAlignment="Top" TextWrapping="Wrap" Text="200,200"/>
<Button x:Name="btnDraw" Height="30" HorizontalAlignment="Right" Margin="0,11,115,0" VerticalAlignment="Top" Width="87" Content="Button"/>
</Grid>
</UserControl>


using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace LoadSilverlight
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
Loaded += new RoutedEventHandler(MainPage_Loaded);
btnDraw.Click += new RoutedEventHandler(btnDraw_Click);
}

void btnDraw_Click(object sender, RoutedEventArgs e)
{
string [] str1 = txtS.Text.Split(',');
string[] str2 = txtEnd.Text.Split(',');
double radius = 2.0;
List<Point> points = GetLinePoints(new Point(double.Parse(str1[0]), double.Parse(str1[1])), new Point(double.Parse(str2[0]), double.Parse(str2[1])), radius);
txtEnd.Text = "";

drawCanvas.Children.Clear();
Ellipse drawEllipse;
for (int i = 0; i < points.Count; i++)
{
drawEllipse = new Ellipse();
drawEllipse.Fill = new SolidColorBrush(Colors.White);
drawEllipse.Width = radius;
drawEllipse.Height = radius;
drawCanvas.Children.Add(drawEllipse);
Canvas.SetLeft(drawEllipse,points[i].X);
Canvas.SetTop(drawEllipse, points[i].Y);
txtEnd.Text += String.Format("{0},{1} ", points[i].X, points[i].Y);

}
}

void MainPage_Loaded(object sender, RoutedEventArgs e)
{

}
List<Point> GetLinePoints(Point sPoint, Point ePoint, double pointStep)
{
List<Point> points = new List<Point>();
double dx = ePoint.X - sPoint.X;
double dy = ePoint.Y - sPoint.Y;
double dest = Math.Sqrt(dx * dx + dy * dy);
Point p;
int stepCount = Convert.ToInt32(Math.Abs(dest) / pointStep);
double xStep = (ePoint.X - sPoint.X) / stepCount;
double yStep = (ePoint.Y - sPoint.Y) / stepCount;

for (int i = 1; i <= stepCount; i++)
{
p = new Point();
p.X = sPoint.X + i * xStep;
p.Y = sPoint.Y + i * yStep;
points.Add(p);
}
return points;
}
}
}


代码已测试通过,刚开始想复杂了以为要用直线方程
changmaohai1980 2009-10-20
  • 打赏
  • 举报
回复
jv9
(冷秋寒)

感谢您的回复.
您的代码我运行的结果为:
Vector 1 :8,10
Vector 2 :0,10
Vector Addition:8,20
Vector 1 Scaled by 2 :16,20

本人菜鸟,没有看出这些值坐标和直线的所有坐标有啥关系.


changmaohai1980 2009-10-19
  • 打赏
  • 举报
回复
请问如何做呢?
Error_Code 2009-10-19
  • 打赏
  • 举报
回复
有起点和终点 线上的点的坐标跟画线算法有关

8,757

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧