如何二维矩阵读入一维矩阵?
问一个问题,我在做一个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++不允许这么做,也可能我没有找对正确的方法。
特在这里请教各位同学。谢谢!
有,直接用内存copy的方法将一个数组拷贝到目标位置即可 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: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}; 用结构数组如何:
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) ; 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 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);
} jackz007 发表于 2019-3-27 14:19
用结构数组如何:
谢谢!我先消化下!:) Croper 发表于 2019-3-27 14:56
我错了,数组只能在定义的时候使用Initializer List,这么基本的东西被我搞忘了;
按楼下的来吧,C ...
谢谢啊,我先消化下。:) 老猪想回高老庄 发表于 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};
}
想怎么弄怎么弄,数组大小都不用定义 Croper 发表于 2019-3-27 18:17
才看到是C++,
c++就简单了,直接标准库走起
非常感谢:), 我先试试这两种方法。 本帖最后由 老猪想回高老庄 于 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才对啊。 查了一下,
https://www.arduino.cn/thread-67356-1-1.html
arduino的c++是不自带标准库的,不然你就用前面的方法,不然就按上面的添加一个标准库吧 Croper 发表于 2019-3-28 13:41
查了一下,
https://www.arduino.cn/thread-67356-1-1.html
arduino的c++是不自带标准库的,不然你就用前 ...
好的,非常感谢你的帮助:)
页:
[1]