c#怎么表示一个向量,及两个向量的叉乘

xizhjxust_GIS 2012-07-25 03:43:40

如图
其中
P1 ,P2 对应于线段的两个端点, d 表示的是线段的走向的单位向量, N 表
示端点 P1 处的法向,S 是待求的向量,由N 与S 可以确定端面所在的平面。
这个过程使用空间解析几何中的叉乘(cross product)来确定,因此如果已知一条
平面上的 2 个非平行向量,就可以通过叉乘求得于这个平面垂直的法线。计算公式
如公式 4-3:
S = d × N

c#怎么求出P1端点处的法线,只要求出其中一条就行,还有向量叉乘怎么表示
...全文
2855 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yajiedesign 2013-09-20
  • 打赏
  • 举报
回复
引用 15 楼 bwangel 的回复:
C#提供了复数及其运算,向量可以表示成复数形式。
错了,向量和复数看着像,区别还是蛮多的,而且向量可能是多维的,许多分类问题有个几百维也很正常.
bwangel 2012-07-25
  • 打赏
  • 举报
回复
C#提供了复数及其运算,向量可以表示成复数形式。
xizhjxust_GIS 2012-07-25
  • 打赏
  • 举报
回复
嗯,谢谢给位的回答
stonespace 2012-07-25
  • 打赏
  • 举报
回复
向量,在3D处理中经常使用,一般用float[]或者double[]表示,
lizhengdao1314 2012-07-25
  • 打赏
  • 举报
回复
用运算符重载:

public class Vector3D
{
public double x{get;set;}
public double y{get;set;}
public double z{get;set;}
}
public Vector3D operator * (Vector3D lhs,Vector3D rhs)
{
Vector3D reVector3D = new Vector3D();
reVector3D.x=lhs.x*rhs.x;
reVector3D.y=lhs.y*rhs.y;
reVector3D.z=lhs.z*rhs.z;
return reVector3D;
}

//调用时:
Vector3D vector1 = new Vector3D(20, 30, 40);//向量1=(20,30,40)
Vector3D vector2 = new Vector3D(45, 70, 80);//向量2=(45,70,80)
Vector3D crossProduct = new Vector3D();//叉积结果
crossProduct=vector1*vector2;
iyomumx 2012-07-25
  • 打赏
  • 举报
回复
MSDN上就有:

Vector3D vector1 = new Vector3D(20, 30, 40);//向量1=(20,30,40)
Vector3D vector2 = new Vector3D(45, 70, 80);//向量2=(45,70,80)
Vector3D crossProduct = new Vector3D();//叉积结果

crossProduct = Vector3D.CrossProduct(vector1,vector2);//计算向量1×向量2
xizhjxust_GIS 2012-07-25
  • 打赏
  • 举报
回复
看了下帮助文档,有叉乘的运算,以下是帮助里的代码
// Calculates the cross product of two Vector3D structures
// using the static CrossProduct method.
// Returns a Double.

Vector3D vector1 = new Vector3D(20, 30, 40);
Vector3D vector2 = new Vector3D(45, 70, 80);
Vector3D crossProduct = new Vector3D();

crossProduct = Vector3D.CrossProduct(vector1,vector2);
// crossProduct is equal to (-400, 200, 50)

谢谢iyomumx
xizhjxust_GIS 2012-07-25
  • 打赏
  • 举报
回复
刚引用了,但我不会用啊,能不能给个例子展示下用法
iyomumx 2012-07-25
  • 打赏
  • 举报
回复
WPF的基础库PresentationCore.dll里有相关的结构和运算,在System.Windows.Media.Media3D命名空间中的Vector3D 结构。
xizhjxust_GIS 2012-07-25
  • 打赏
  • 举报
回复
//Compute the dot product AB BC
int dot(int[] A, int[] B, int[] C){
AB = new int[2];
BC = new int[2];
AB[0] = B[0]-A[0];
AB[1] = B[1]-A[1];
BC[0] = C[0]-B[0];
BC[1] = C[1]-B[1];
int dot = AB[0] * BC[0] + AB[1] * BC[1];
return dot;
}
//Compute the cross product AB x AC
int cross(int[] A, int[] B, int[] C){
AB = new int[2];
AC = new int[2];
AB[0] = B[0]-A[0];
AB[1] = B[1]-A[1];
AC[0] = C[0]-A[0];
AC[1] = C[1]-A[1];
int cross = AB[0] * AC[1] - AB[1] * AC[0];
return cross;
}
这是自定义的俩个二维向量的简单点乘和叉乘方法,但我不知道这样的效率如何,因为我要进行的是大量数据的叉乘运算,不知道用运算符的重载是不是会更好,我不知道怎么写,求大侠帮帮忙解决下
xizhjxust_GIS 2012-07-25
  • 打赏
  • 举报
回复
首先我还是谢谢你,其实是我c#基础不好,我当然知道向量的点乘和叉乘啊,只是不知道怎么用在c#中表示,求个简单例子实现两个三维向量的叉乘函数,我不知道怎么去重载叉乘。
晚安苏州 2012-07-25
  • 打赏
  • 举报
回复
你把图片上传到你的CSDN空间相册去,然后在网站中打开图片,右击复制图片链接,在帖子编辑中添加图片,粘贴链接,结束。
还有关于求法向量的,如果是求平面法向量,只要知道平面上不共线的两个向量,法向量跟它们俩乘积为0;单独求某个向量的法向量,即只要两向量乘积为0;如果你这个基本不懂或者都不知道向量怎么相乘,复习向量去……
xizhjxust_GIS 2012-07-25
  • 打赏
  • 举报
回复
怎么没人回答啊 在线等
xizhjxust_GIS 2012-07-25
  • 打赏
  • 举报
回复
怎么传图片啊 还要什么网址啊 没传过
晚安苏州 2012-07-25
  • 打赏
  • 举报
回复
图挂了,看不到……

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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