如何解决我如何找到长度?我有 8 个管和 11 个节点
所以我有 11 个管和 8 个节点。 长度是节点 1 到节点 2 的距离。
8 //nodes
11 //tubes
0 0 -50 //node_x,node_y,flow
1000 0 -50 //node_x,flow
2000 0 0 //node_x,flow
0 500 0 //node_x,flow
500 500 0 //node_x,flow // NODES
0 1000 -50 //node_x,flow
1000 1000 0 //node_x,flow
2000 1000 150 //node_x,flow
1 2 0.5 //Node_1,Node_2,Diameter
2 3 0.5 //Node_1,Diameter
1 4 0.5 //Node_1,Diameter
4 5 0.5 //Node_1,Diameter
2 5 0.5 //Node_1,Diameter
2 8 0.5 //Node_1,Diameter // TUBES
3 8 0.5 //Node_1,Diameter
4 6 0.5 //Node_1,Diameter
6 7 0.5 //Node_1,Diameter
5 7 0.5 //Node_1,Diameter
7 8 0.5 //Node_1,Diameter
如上面的文本文件所示,我们有 8 个节点数据,其节点为 x,y,flow 值,11 个数据节点为节点 1,2 id 和直径。
表示管子的第一个数据,即 id 1 和 id 2 = 0 0 -50 和 1000 0 -50 所以长度是 1000。如图所示,我们需要这里的 x 值,所以 x 在C++。
我现在的代码是硬编码的,如下所示:
for (int i = 0; i < 11; i++)
{
//1
if (node1_[i].id() == 0 && node2_[i].id() == 1)
{
return node2_->x();
}
//2
if (node1_[i].id() == 1 && node2_[i].id() == 2)
{
return node1_->x();
}
//3
if (node1_[i].id() == 0 && node2_[i].id() == 3)
{
return node2_->y();
}
//4
if (node1_[i].id() == 3 && node2_[i].id() == 4)
{
return node2_->x();
}
//5
if (node1_[i].id() == 1 && node2_[i].id() == 4)
{
return std::sqrt((node2_->x()) * (node2_->x()) + (node2_->y()) * (node2_->y()));
}
//6
if (node1_[i].id() == 1 && node2_[i].id() == 7)
{
return std::sqrt((node1_->x()) * (node1_->x()) + (node2_->y()) * (node2_->y()));
}
//7
if (node1_[i].id() == 2 && node2_[i].id() == 7)
{
return node2_->y();
}
//8
if (node1_[i].id() == 3 && node2_[i].id() == 5)
{
return node1_->y();
}
//9
if (node1_[i].id() == 5 && node2_[i].id() == 6)
{
return node2_->x();
}
//10
if (node1_[i].id() == 4 && node2_[i].id() == 6)
{
return std::sqrt((node1_->x()) * (node1_->y()) + (node1_->x()) * (node1_->y()));
}
//11
if (node1_[i].id() == 6 && node2_[i].id() == 7)
{
return node1_->x();
}
}
如何删除手动写入的 id 并使其成为数据驱动的,以便它知道自己选择哪个 id
length[0] = 1000
length[1] = 1000
length[2] = 500
length[3] = 500
length[4] = 707.107
length[5] = 1414.21
length[6] = 1000
length[7] = 500
length[8] = 1000
length[9] = 707.107
length[10] = 1000
这些是我得到的正确值。 但我想改变我的工作方式。将硬编码方法更改为数据驱动方式。
解决方法
要“概括”您的计算,您需要一个“通用”函数,该函数根据连接到管的节点数量进行计算。 这个你必须找到自己。
读入数据后,可以计算出需要什么。 这是读取数据的想法:
-
为
Tube
和Node
定义类。 -
使用
std::vector
来包含它们(std::vector<Tube> tubes;
和std::vector<Node> nodes;
-
tubes
应该包含在Node
类中 -
读入所有的管和节点。
-
读取管时,将编号较低的节点编号指定为管的位置
-
遍历节点并使用广义函数计算它的管
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。