在WPF中围绕Z的正向旋转的Matrix3D
令P为point3d,使得p = {1,0,0}.我需要定义围绕 +45维格的z轴旋转,并将其应用于P.在右手惯例下,转换m被定义: m = 0.707 -0.707 0 0 0.707 0.707 0 0 0 0 1 0 0 0 0 1 数学上: m x p = 0.707 -0.707 0 0 1 0.707 0.707 0.707 0 0 X 0 = 0.707 0 0 1 0 0 0 0 0 0 1 1 1 这是我的C#代码: private void testMatrix3D() { double angle_rad = Math.PI/4; double c
14 2024-04-26
编程技术问答社区
C# GDI+ ScaleTransform在picturebox上是可以的,但保存的图像是原始的。
嗨,我有一个问题:当我使用scaletransform(zoomfactor,zoomfactor)时,保存在磁盘上的图像始终是原始版本,而在屏幕上,在屏幕上,图像是根据Zoomfactor成比例的. 为什么会发生这种情况?我是否应该在磁盘书面图像上使用E.Graphics的最终结果? 我的代码是以下内容,它是带有矩阵的版本.但是,我也使用了矩阵,而不是矩阵.结果总是相同的: g=e.Graphics;//inside picturebox_paint() g.ScaleTransform(ratio * zoomFac, ratio * zoomFac); e.Graphics.DrawImage((Bitmap)bmp, 0, 0); int seed = Convert.ToInt32(Regex.Match(Guid.NewGuid().To
14 2024-04-26
编程技术问答社区
C#顶点边缘
我有一个问题,要做此任务:n-vertex图是蝎子,如果它具有连接到顶点两个(尾巴)的顶点1(刺)的顶点3(尾巴)连接到另一个顶点3(尾巴)顶点(脚).某些脚可能连接到其他脚.设计一种算法,该算法决定给定的图形是否代表蝎子,并在哪一行刺,尾巴,身体和feets中说明. 这是我要读取的数据文件: (+)是边缘和( - ),没有边缘 我试图首先找到刺痛,但是我基本上可以如何寻找与尾巴和身体的联系? 也必须使用递归 编辑: 好的,现在我发现每行中有多少"+": int[] B = new int[100]; for (int i = 0; i
12 2024-04-26
编程技术问答社区
带线程的矩阵乘法
我想乘法矩阵.当我使用并行使用时,单线线比多线程慢.但是当我使用两个线程时,单线线程比两个线程快. 我想使用两个线程使用乘法矩阵.我的错误是什么?我不明白.谢谢您的回答. class carp { double[,] a = new double[300, 300]; double[,] b = new double[300, 300]; double[,] c = new double[300, 300]; int indis = 0; public carp(double[,] a, double[,] b, double[,] c,int i) { this.a = a; this.b = b; this.c = c; indis = i; } public void matrixloop() {
6 2024-04-26
编程技术问答社区
按单元格定义填充矩阵
我需要在像矩阵之类的视图中显示和编辑我的数据.所有数据将收集到ObserverableCollection中.然后,我将填写每个单元格定义的集合.每个单元格的定义都有其行和列的钥匙,以及一个字符串,应在矩阵中显示. public class CellViewModel : ViewModelBase { public object RowKey { get; set; } public object ColumnKey { get; set; } public string CellText { get; set; } } 这意味着,当将A CellViewModel添加到集合中,并且已经存在同一rowekey的行时,该单元将被填充到此行的合适列中.如果不存在列,将添加新的列.钥匙可以是任何对象,该人可以添加一个带有任何对象键的单元格,也不需要关心设置正确的单元位置.例如,我用CellViewModels填充该集合: GridCellVie
14 2024-04-26
编程技术问答社区
有特定线程数的矩阵乘法
我在多线程领域是全新的.目前,我正在尝试实现一个命令行程序,该程序能够乘以两个相等大小的矩阵.主要目标是用户可以作为命令行参数输入特定数量的线程,并且使用该数量的线程来解决乘法任务. 我的方法基于以下Java实现,该实现试图解决类似的任务:我目前的状态是以下一个: using System; using System.Threading; using System.Collections.Generic; using System.Diagnostics; using System.Threading.Tasks; class Program { static int rows = 16; static int columns = 16; static int[] temp = new int[rows*columns]; static int[,] matrixA = new int[rows, columns]; static i
6 2024-04-26
编程技术问答社区
如何使一个物体面对它的前进矢量
类似于我最近的Vector3 line = dalekList[i].direction; float rotationDal = (float)(-Math.Atan2(dalekList[i].position.X, -dalekList[i].position.Z) / (2 * Math.PI)); Matrix dalekTransform = Matrix.CreateScale(GameConstants.DalekScalar) * Matrix.CreateRotationY(rotationDal) * Matrix.CreateTranslation(dalekList[i].position); 所以我需要将旋转(rotationDal)放入CreateRotationY>中,只有我不确定如何计算该角度. 解决方案 如果要"观看"的向量是dalekList[i].direction,则应尝试在其上使用Atan2,而不是位置.
14 2024-04-26
编程技术问答社区
C#旋转(变换)问题
我正在尝试创建程序,其中将是画布上画的鱼类的列表. (下一步将根据一些计算改变鱼类的位置) 每条鱼都由位图表示(PNG文件7x12 PX带有鱼的图片). 我创建的表单是我的图纸画布.它的尺寸为640x480 px. 在下面的代码中是我使用的简化代码(我剪切了所有不是必要的东西).我的问题是使用变形矩阵,目前仅旋转. 问题在类鱼类中 方法draw()每条鱼的旋转30度,但后来每条鱼的起始旋转角度将不同.我想通过围绕其中心的旋转角度将鱼旋转的何处转换.因此,在这种情况下,所有鱼类都应在一条线中,并通过其旋转角度旋转(此处为30度). ,但它们被放在对角线上,因此转换以某种方式弄乱了. 我怎样才能解决这个问题? 我可能不正确地使用诱导性. 使用类中的名称空间 using System.Drawing;//Graphics, Point using System.Drawing.Drawing2D;//Matrix 鱼 class Fish {
2 2024-04-25
编程技术问答社区
在单元测试中检查矩阵值的最佳方式是什么?
在单位测试中检查矩阵值的最佳方法是什么? 我的项目中有一种方法,类似的东西: int[][] getMatrix() { int[][] ans = new int[1][]; ans[0] = new int[1]; ans[0][0] = 0; return ans; } 我想使用Visual Studio标准测试引擎对该类进行单位测试,因此我创建了一个单元测试,类似的内容: [TestMethod] public void Test() { var result = getMatrix(); int[][] correct = new int[1][]; correct[0] = new int[1]; correct[0] = 0; Assert.AreEqual(correct.Length, result.Length); for (int i = 0; i
14 2024-04-25
编程技术问答社区
在C#中从文件中读取2D矩阵为2D int数组
我在从文件中读取2D文本并将其导入到 int 数组中有问题.具体来说,我的文本文件如下所示: 2,3,4,5,6 5,2,3,4,5 2,4,6,7,4 2,7,8,5,6 因此,矩阵中的每个单元格被逗号分隔,每个新行以新行开头. 我尝试了许多使它起作用的方法,但我不能!简而言之,我想要一个int[][]或int[,]数. p.s:我可以简单地读取1-d矩阵,如下所示: int[] array= File.ReadAllText(fileppath).Split(',').Select(t => int.Parse(t)).ToArray(); 解决方案 // Read the text file var text = File.ReadAllLines(@"path\to\file.txt"); // Split on `,`, convert to int32, add to array, add to outer array
14 2024-04-25
编程技术问答社区
如何使用ILMath.invert函数?
在ilnumerics中,我想倒置一个矩阵A.结果是矩阵B.这是我的代码: ILArray data = ILSpecialData.sinc(50, 50); ILArray data2 = ILMath.zeros(50, 50); ILMath.invert(data, data2); 该方法是: ILMath.invert Method (ILInArray, ILOutArray) public static void invert( ILInArray A, ILOutArray outArray ) ,但我在矩阵B(data2)中获得了零矩阵,而不是矩阵A(数据)的反转.我应该做什么来解决这个问题? 如果是因为我曾经使用iLarray而不是Ilinarray和Iloutarra
10 2024-04-25
编程技术问答社区
访问N个(未知)维度的矩阵中所有点的算法
i具有多维矩阵,其尺寸大于一个.寻找可以访问矩阵中每个点的有效算法. 有关代码的一些信息: 矩阵具有有价值的登录器(尽管这些并不相关). object value = matrixInstance.GetValue(int[] point); matrixInstance.SetValue(object value, int[] point); 注意:参数 point 是索引的数组,必须匹配尺寸的#或抛出异常. 有关矩阵结构的信息可以通过: 获得 int numDims = matrixInstance.Rank; //# dimensions int sizeDim = matrix.getRankSize(int index); // length of specified dimension 我想使用相对有效的算法在矩阵的所有可能点上迭代. 例如,在2x3 2D矩阵中,将访问以下六个点: [0,0] [0,1] [0,2] [1,0]
8 2024-04-25
编程技术问答社区
如何实现二维矩阵的Kadane算法
我正在尝试弄清楚如何为Kadane的2D矩阵算法实现C#代码.我在这里找到了一个1D版本: kadane的算法,以找到最大的子阵列一个> ,但我想要一个2D版本.基本上,给定一个正数和负数的矩阵n x n,我需要找到一个子序列,其中所有元素的总和将是最大的. 解决方案 弄清楚了.对于那些感兴趣的人 static void Main(string[] args) { int[,] array2D = new int[,] { { 1, 2 }, { -3, 4 }, { 5, -6 }, { -7, -8 } }; var max = GetMaxMatrix(array2D); Console.WriteLine(max
6 2024-04-24
编程技术问答社区
如何从控制台读取一个矩阵并打印所有矩阵元素的总和
我正在学习C#,现在我正在使用多维阵列.我想编写一个读取矩阵的程序: 行的计数 列计数 所有矩阵元素的总和 因此,在下一个 [rows] 线上,我将获得每列的元素,以逗号和空间分开.我做了一个款项,但我不明白如何将元素插入矩阵中.如果您能帮助我,我会很感激! int[] dimensions = Console.ReadLine() .Split(", ", StringSplitOptions.RemoveEmptyEntries) .Select(int.Parse) .ToArray(); int rows = dimensions[0]; int columns = dimensions[1]; int[,] matrix = new int[rows,columns]; for (int i = 0; i
6 2024-04-24
编程技术问答社区
XNA三维碰撞矩阵不工作
我以前问了一个问题,说明为什么我的碰撞不起作用.我得到了一个很好的答案,这是有道理的:将与DrawModel方法相同的转换应用于ISCollision方法.但是,这无效.我无法弄清楚如何在ISCollision方法中进行相同的转换.如果有人能帮助我,那就太好了.谢谢!这是方法: private bool checkPlayerCollision(Model model1, Matrix world1) { //Make floor matrix Matrix floorMatrix = Matrix.CreateTranslation(new Vector3(0, 0, 0)); //Make ship1 matrix Matrix ship1WorldMatrix = Matrix.CreateTranslation(ship1loc); //Make ship2 matrix Matrix ship2WorldMatrix = M
18 2024-04-23
编程技术问答社区
DirectX:世界到视图矩阵-我的误解在哪里?
我从DirectX开始(和SharpDx,因此仅在C#/HLSL中编程),并试图构建自己的相机课程.它应该是可旋转的,允许向前和向后移动以及"侧向"运动(经典的第一人称运动通常映射到A和D,以及在我的情况下上下上下).在我的情况下,为了更容易的错误将模型和世界空间相同,尚未像旋转相机那样实现透视投影,并且我的相机应该在正面的Z轴(进入屏幕上).我的错误将模型是一个简单的四边形,具有1.f宽度和高度,z = 0,并以屏幕为中心. 为了易于使用,我找到了DirectX的Matrix.LookAtLH(),并正在使用它来构建我的矩阵,以从世界上翻译以查看坐标,以我的相机在世界坐标中的位置,上升向量(目前 - 无需旋转 - 始终是正面的) Y轴)和世界坐标的目标点. 我的(顶点)着色器使用此矩阵使用简单的乘法: output.position = mul(position, worldToView); lookat-matrix的计算是这样的: Matrix.LookAtLH(vec3
6 2024-04-22
编程技术问答社区
如何在c#中绘制2d等高线图?
我主要对算法感兴趣,这使我能够将point3d []转换为可绘制的GDI线? 解决方案 感谢@anders Gustafsson,我能够构建一些东西: public partial class FunctionGraph : UserControl { private Rectangle _area = new Rectangle(-10, -10, 20, 20); private Func _func; public FunctionGraph() { SetStyle( ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer |
34 2024-04-22
编程技术问答社区
使用SlimDX时,不正确的剪裁和3D投影
我正在研究一个简单的项目,我希望在Winforms应用程序中使用Slimdx显示3D对象.我创建了一个小型项目来做到这一点,但是我遇到了一个问题,我呈现的对象在0.0f和-1.0f之间夹住. . 我已经查看了一个朋友的代码(他们没有这个问题),无法确定发生这种情况的原因.为了使我能够看到它,我不得不将对象的大小限制为-0.1f-> 0.1F的范围.延长我的远面飞机无济于事.我的朋友正在使用的项目可以加载对象超过我的大小超过我的大小,没有剪辑问题. 有人有任何建议吗? (请参阅下面的屏幕截图和代码) 表格代码 namespace TestOfTheTest { using System.Drawing; using System.Windows.Forms; using SlimDX; using SlimDX.Direct3D9; using MathHelper = Microsoft.Xna.Framework.MathH
10 2024-04-21
编程技术问答社区
将矩阵值复制到有效的新矩阵
是否有一个有效的内置方法将值从一个矩阵(例如double[,])复制到另一个矩阵? 按顺序单词,我正在寻找以下功能的替换: public static double[,]CloneMatrix(double[,] aMatrix) { var newMatrix = new double[aMatrix.GetLength(0),aMatrix.GetLength(1)]; for (int i = 0; i
22 2024-04-21
编程技术问答社区