老猪想回高老庄 发表于 2019-3-27 11:21:09

如何二维矩阵读入一维矩阵?

问一个问题,我在做一个arduino的小项目,想通过步进电机来操作一个机械臂。我想通过记录步进电机的转动坐标来记录机械臂的空间坐标, 以此记录下机械臂的运动路径并将其记录于一个二维数据矩阵中。我的设想是把移动中关键空间坐标记录下来, 比如如果有n步,(x0, y0, z0, 0), (x1,y1,z1,1)... (xn,yn,zn,n)。
我在网上搜了一下,发现这种二维矩阵的写入有两种方式,第一种是一次性写入,比如:
coordinates = {{5,7,9,0},{1,3,5,1},{2,4,7,2},{5,8,1,3}}
第二种是逐个元素写入:
int coordintates
for(int i=0; i<5; i++){
   for(int j=0; j<4; j++){
    coordinates = values
}
但这两种都不是我想要的方式,我想一次记录一组坐标,像这样:
coordinates = {5,7,9,0};
coordinates = {1,3,5,1};
coordinates = {2,4,7,2};
coordinates = {5,8,1,3};
但是发现好像C++不允许这么做,也可能我没有找对正确的方法。
特在这里请教各位同学。谢谢!



BngThea 发表于 2019-3-27 11:24:09

有,直接用内存copy的方法将一个数组拷贝到目标位置即可

老猪想回高老庄 发表于 2019-3-27 11:28:19

BngThea 发表于 2019-3-27 11:24
有,直接用内存copy的方法将一个数组拷贝到目标位置即可

请问具体怎么做, 我是想设置一个interrupt程序coordinate_record(),每触发一次便记录下当前的坐标值(x,y,z,n),像这样:
int n = 0;
int coordinates
coordinate_record()
{
coordinates = {x,y,z,n}
n++
}

Croper 发表于 2019-3-27 14:12:12

本帖最后由 Croper 于 2019-3-27 14:23 编辑

老猪想回高老庄 发表于 2019-3-27 11:28
请问具体怎么做, 我是想设置一个interrupt程序coordinate_record(),每触发一次便记录下当前的坐标值( ...

这样写int coordinates;
coordinates = {5,7,9,0};
coordinates = {1,3,5,1};
coordinates = {2,4,7,2};
coordinates = {5,8,1,3};

jackz007 发表于 2019-3-27 14:19:12

    用结构数组如何:
typedef struct record {
      int x ;
      int y ;
      int z ;
      int n ;
} POINT       ;

void setpoint(POINT * p , const int x , const int y , const int z , const int n)
{
      p -> x = x ;
      p -> y = y ;
      p -> z = z ;
      p -> n = n ;
}

POINT coordinates ;

setpoint(& coordinates , 5 , 7 , 9 , 0) ;
setpoint(& coordinates , 1 , 3 , 5 , 1) ;
setpoint(& coordinates , 2 , 4 , 7 , 2) ;
setpoint(& coordinates , 5 , 8 , 1 , 3) ;

老猪想回高老庄 发表于 2019-3-27 14:32:11

Croper 发表于 2019-3-27 14:12
这样写

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
int coordinates;
coordinates = {5,7,9,0};
coordinates = {1,3,5,1};
coordinates = {2,4,7,2};
coordinates = {5,8,1,3};

for(int i=0; i < 4; i++){
for(int j =0; j < 4; j++){
Serial.print(coordinates);}
}
}
以上是我的程序, 一直报错:
Arduino: 1.8.5 (Windows 7), Board: "Arduino/Genuino Uno"

C:\Users\Valued Customer\Documents\Arduino\Coordinate\Coordinate.ino: In function 'void setup()':

Coordinate:10: error: assigning to an array from an initializer list

coordinates = {5,7,9,0};

                ^

Coordinate:11: error: assigning to an array from an initializer list

coordinates = {1,3,5,1};

                ^

Coordinate:12: error: assigning to an array from an initializer list

coordinates = {2,4,7,2};

                ^

Coordinate:13: error: assigning to an array from an initializer list

coordinates = {5,8,1,3};

                ^

exit status 1
assigning to an array from an initializer list

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Croper 发表于 2019-3-27 14:56:56

本帖最后由 Croper 于 2019-3-27 15:07 编辑

老猪想回高老庄 发表于 2019-3-27 14:32
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);


我错了,数组只能在定义的时候使用Initializer List,这么基本的东西被我搞忘了;

按楼下的来吧,C语言的范畴内应该是这样写最简单了

或者这样写
typedef struct record {
      int x;
      int y;
      int z;
      int n;
} POINT;

POINT point(int x ,int y ,int z ,int n)
{
        POINT p;
      p.x = x ;
      p.y = y ;
      p.z = z ;
      p.n = n ;
}

int main(){
        POINT coordinates;

        coordinates=point(5,7,9,0);
        coordinates=point(1,2,3,1);
        coordinates=point(2,4,7,2);
        coordinates=point(5,8,1,3);
}

老猪想回高老庄 发表于 2019-3-27 15:09:34

jackz007 发表于 2019-3-27 14:19
用结构数组如何:

谢谢!我先消化下!:)

老猪想回高老庄 发表于 2019-3-27 15:10:25

Croper 发表于 2019-3-27 14:56
我错了,数组只能在定义的时候使用Initializer List,这么基本的东西被我搞忘了;

按楼下的来吧,C ...

谢谢啊,我先消化下。:)

Croper 发表于 2019-3-27 18:17:24

老猪想回高老庄 发表于 2019-3-27 15:10
谢谢啊,我先消化下。:)

才看到是C++,
c++就简单了,直接标准库走起#include <vector>
using namespace std;
int main(){
    vector<vector<int>> coordinates;
   
    coordinates = {5,7,9,0};
    coordinates = {1,3,5,1};
    coordinates = {2,4,7,2};
    coordinates = {5,8,1,3};
}

想怎么弄怎么弄,数组大小都不用定义

老猪想回高老庄 发表于 2019-3-28 03:41:44

Croper 发表于 2019-3-27 18:17
才看到是C++,
c++就简单了,直接标准库走起



非常感谢:), 我先试试这两种方法。

老猪想回高老庄 发表于 2019-3-28 11:05:49

本帖最后由 老猪想回高老庄 于 2019-3-28 12:00 编辑

Croper 发表于 2019-3-27 18:17
才看到是C++,
c++就简单了,直接标准库走起



你好, 我试了下好像还有点问题, 我写了如下的code,想测试一下有没有问题:
#include <Arduino.h>
#include <Streaming.h>
#include <Vector.h>

void setup()
{
Serial.begin(9600);
delay(1000);
Vector<int> vector;
vector.push_back(3);
vector.push_back(5);
vector.push_back(7);
vector.push_back(3);
vector.push_back(5);
vector.push_back(9);
Serial.print("Vector: ");
Serial.print(vector);
}

编译没有问题了, 但是当我上传给arduino uno后,结果在serial monitor里面显示:
Vector: 0
好奇怪,结果应该是其中的一个值才对啊。

我又测试了以下的code:
void setup()
{
Serial.begin(9600);
delay(1000);
Vector<int> vector;
vector.push_back(3);
vector.push_back(5);
vector.push_back(7);
vector.push_back(3);
vector.push_back(5);
vector.push_back(9);
Serial.print("Vector Size = ");
Serial.print(vector.size());
}
结果在serial monitor 里显示:
Vector Size = 0
应该是6才对啊。

Croper 发表于 2019-3-28 13:41:23

查了一下,
https://www.arduino.cn/thread-67356-1-1.html
arduino的c++是不自带标准库的,不然你就用前面的方法,不然就按上面的添加一个标准库吧

老猪想回高老庄 发表于 2019-3-28 14:14:21

Croper 发表于 2019-3-28 13:41
查了一下,
https://www.arduino.cn/thread-67356-1-1.html
arduino的c++是不自带标准库的,不然你就用前 ...

好的,非常感谢你的帮助:)
页: [1]
查看完整版本: 如何二维矩阵读入一维矩阵?