Реализация метода конечных элементов для расчета ферменных конструкций под ОС Android
Оценка сложных структур, содержащих большое количество элементов. Применение метода конечных элементов. Разработка программ автоматического оценивания. Реализация на языках JAVA в Android Studio и MATLAB. Генерация необходимого пользователю прогиба ферм.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 30.08.2016 |
Размер файла | 1,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
float zj1 = nodesfloat[nj * 3 - 1];
path.lineTo(30*(xj1)+getWidth()/4, 30*(zj1)+getHeight()/2);
i++;
re.setColor(Color.BLACK);
canvas.drawPath(path, re);
}
for (int i =0;i<2*(nodesfloat.length/3+5);) {
int ni = elements[i];
float xi1 = nodesfloatNew[ni * 3 - 3];
float zi1 = nodesfloatNew[ni * 3 - 1];
path2.moveTo(30*(xi1)+getWidth()/4,30*(zi1)+getHeight()/2);
i++;
int nj = elements[i];
float xj1 = nodesfloatNew[nj * 3 - 3];
float zj1 = nodesfloatNew[nj * 3 - 1];
path2.lineTo(30*(xj1)+getWidth()/4, 30*(zj1)+getHeight()/2);
i++;
re.setColor(Color.BLUE);
canvas.drawPath(path2, re);
}
}
}
}
Elements.java
package ru.hse.android.diplom;
class Elements {
static double[] findSigma(int[][] elements,double[]nodes, double modY,double[]displacements){
double nodesNew[] = Nodes.lastNodes(displacements, nodes);
double[] sigma = new double[elements.length];
for (int i = 0; i < elements.length; i++) {
int ni = elements[i][0];
int nj = elements[i][1];
double xi1 = nodes[ni * 3 - 3];
double yi1 = nodes[ni * 3 - 2];
double zi1 = nodes[ni * 3 - 1];
double xj1 = nodes[nj * 3 - 3];
double yj1 = nodes[nj * 3 - 2];
double zj1 = nodes[nj * 3 - 1];
double xi2 = nodesNew[ni * 3 - 3];
double yi2 = nodesNew[ni * 3 - 2];
double zi2 = nodesNew[ni * 3 - 1];
double xj2 = nodesNew[nj * 3 - 3];
double yj2 = nodesNew[nj * 3 - 2];
double zj2 = nodesNew[nj * 3 - 1];
double L1 = Math.sqrt((xi1 - xj1) * (xi1 - xj1) + (yi1 - yj1) * (yi1 - yj1) + (zi1 - zj1) * (zi1 - zj1));
double L2 = Math.sqrt((xi2 - xj2) * (xi2 - xj2) + (yi2 - yj2) * (yi2 - yj2) + (zi2 - zj2) * (zi2 - zj2));
sigma[i] = modY * (L2 - L1) / L1;
}
return sigma;
}
static int[][] defineElements(int kUzl)
{
int arr[][] = new int[15*kUzl/4 - 9][2];
for (int i = 1; i <= kUzl/4-1 ; i++) {arr[2*i - 2][0] = i;arr[2*i - 1][0] = i;arr[2*i - 2][1] = i+1;arr[2*i - 1][1] = i+2;}
for (int i = kUzl/4; i <= kUzl/2-4 ; i=i+2) {arr[2*i-2][0] = i;arr[2*i-2][1] = i+1;arr[2*i][0] = i;arr[2*i][1] = i+3;arr[2*i-1][0] = i;arr[2*i-1][1] = i+2;}
for (int i = kUzl/4 +1; i <= kUzl/2 -3 ; i = i+2) {arr[2*i-1 ][0] = i;arr[2*i-1 ][1] = i+2;}
for (int i = kUzl/2 -2; i <= kUzl/2 -2 ; i = i+1) {arr[2*i - 2][0] = i;arr[2*i - 1][0] = i;arr[2*i - 2][1] = i+1;arr[2*i - 1][1] = i+2;}
for (int i = kUzl/2 -1; i <= kUzl/2 -1 ; i = i+1) {arr[2*i-2 ][0] = i;arr[2*i-2][1] = i+1;}
for (int i = kUzl/2 +1; i <= 3*kUzl/4-1 ; i++) {arr[2*i - 5][0] = i;arr[2*i - 4][0] = i;arr[2*i - 5][1] = i+1;arr[2*i - 4][1] = i+2;}
for (int i = 3*kUzl/4; i <= kUzl-4 ; i=i+2) {arr[2*i-5][0] = i;arr[2*i-5][1] = i+1;arr[2*i-3][0] = i;arr[2*i-3][1] = i+3;arr[2*i-4][0] = i;arr[2*i-4][1] = i+2;}
for (int i = 3*kUzl/4 +1; i <= kUzl -3 ; i = i+2) {arr[2*i-4 ][0] = i;arr[2*i-4 ][1] = i+2;}
for (int i = kUzl -2; i <= kUzl -2 ; i = i+1) {arr[2*i - 4][0] = i;arr[2*i - 5][0] = i;arr[2*i - 4][1] = i+2;arr[2*i - 5][1] = i+1;}
for (int i = kUzl -1; i <= kUzl -1 ; i = i+1){arr[2*i-5 ][0] = i;arr[2*i-5 ][1] = i+1;}
for (int i = 1; i <= kUzl/2 ; i = i+1){arr[2*kUzl-7+i ][0] = i;arr[2*kUzl-7+i ][1] = i+kUzl/2;}
for (int i = 1; i <= kUzl/2-2 ; i = i+1){ if (i == 1) {arr[5*kUzl/2+i-7][0]=i;arr[5*kUzl/2+i-7][1]=i+1+kUzl/2;}else {arr[5*kUzl/2+i-7][0]=i;arr[5*kUzl/2+i-7][1]=i+2+kUzl/2;}}
arr[3*kUzl-8][0] = 2;arr[3*kUzl-8][1] = 1+kUzl/2;
for (int i = 4; i<= kUzl/2; i++){arr[3*kUzl+i-11][0]=i;arr[3*kUzl+i-11][1]=i-2+kUzl/2;}
arr[7*kUzl/2-10][0] = 1;arr[7*kUzl/2-10][1] = kUzl/2+3;arr[7*kUzl/2-9][0] = kUzl/2;arr[7*kUzl/2-9][1] = kUzl-1;
int j=1;
for(int i=3;i<=kUzl/2-1;i=i+2){arr[7*kUzl/2-9+j][0] = i;arr[7*kUzl/2-9+j][1] = kUzl/2-1+i;j=j+1; }
return arr;
}
}
Forces.java
package ru.hse.android.diplom;
class Forces {
static final double g = 9.81;
static double[]applyP (double[]forces, double kUzl,double P) {
double[] applyP =new double[forces.length];
for (int i = 0; i < 3 * kUzl; i++) {
if (i % 6 == 5) {
applyP[i] = forces[i] - P * g;
}
}
return applyP;
}
static double[] findEpsAndVar (double Krit,double P, double eps,int taskType,int[][] elements,double []nodes, double modY,double[] displacements) {
double[] sigma =Elements.findSigma (elements,nodes,modY,displacements);
double max = MathOperations.maxInString(sigma);
double[] epsAndP =new double[2];
if (taskType==1) {
if (max > Krit) {
P = P - P * eps;
eps = eps / 1.2;
} else {
P = P + P * eps;
eps = eps / 1.2;
}
}
else
if (max < Krit) {
P = P - P * eps;
eps = eps / 1.02;
} else {
P = P + P * eps;
eps = eps / 1.02;
}
epsAndP[0]=eps;
epsAndP[1]=P;
return epsAndP;
}
static double[] defineGravity(int nodesNumb,double H,double L, double W, double A, int ro, double g)
{
double HL = Math.sqrt(H*H + L*L);
double WL = Math.sqrt(W*W + L*L);
double HWL = Math.sqrt(H*H + WL*WL);
double WH = Math.sqrt(H*H + W*W);
double V1 = H * A;
double V2 = L * A;
double V3 = HL * A;
double V4 = W * A;
double V5 = WL*A;
double V6 = HWL*A;
double V7 = WH*A;
double m1 = V1 * ro;
double m2 = V2 * ro;
double m3 = V3 * ro;
double m4 = V4*ro;
double m5 = V5*ro;
double m6 = V6*ro;
double m7 = V7*ro;
double F1 = m1 * g / 2;
double F2 = m2 * g / 2;
double F3 = m3 * g / 2;
double F4 = m4* g / 2;
double F5 = m5* g / 2;
double F6 = m6* g / 2;
double F7 = m7* g / 2;
double forc[][] = new double[nodesNumb][3];
forc[0][2] = -(F2+F3+F4+F5+F6);
forc[1][2] = -(2*F2+F1+F4+2*F5);
forc[2][2] = -(F1+F2+2*F3+F4+F5+F7);
if (nodesNumb != 16)
{
for (int i = 4;i <= nodesNumb/4-2;i=i+2)
{
forc[i-1][2] = -(F1+2*F2+F3+F4+2*F5);
}
}
if (nodesNumb != 16)
{
for (int i = 5;i <= nodesNumb/4-1;i=i+2)
{
forc[i-1][2] = -(F1+2*F2+F3+F4+2*F5+F7);
}
}
forc[nodesNumb/4-1][2] = -(F1+2*F2+2*F3+F4+2*F5);
forc[nodesNumb/4][2] = -(F1+2*F2+F4+2*F5+F7);
if (nodesNumb != 16)
{
for (int i = nodesNumb/4+2;i <= nodesNumb/2-4;i=i+2)
{
forc[i-1][2] = -(F1+2*F2+F3+F4+2*F5);
}
}
if (nodesNumb != 16)
{
for (int i = nodesNumb/4+3;i <= nodesNumb/2-3;i=i+2)
{
forc[i-1][2] = -(F1+2*F2+F3+F4+2*F5+F7);
}
}
forc[nodesNumb/2-3][2] = -(F1+2*F2+F4+2*F5);
forc[nodesNumb/2-2][2]= -(F1+F2+2*F3+F4+F5+F7);
forc[nodesNumb/2-1][2]= -(F2+F3+F4+F5+F6);
forc[nodesNumb/2][2]= -(F2+F3+F4+F5);
forc[nodesNumb/2+1][2]= -(F1+2*F2+F4+2*F5+F7);
forc[nodesNumb/2+2][2]= -(F1+F2+2*F3+F4+F5+F6);
if (nodesNumb != 16)
{
for (int i = nodesNumb/2+4;i <= 3*nodesNumb/4-2;i=i+2)
{
forc[i-1][2] = -(F1+2*F2+F3+F4+2*F5+F7);
}
}
if (nodesNumb != 16)
{
for (int i = nodesNumb/2+5;i <= 3*nodesNumb/4-1;i=i+2)
{
forc[i-1][2] = -(F1+2*F2+F3+F4+2*F5);
}
}
forc[3*nodesNumb/4-1][2]= -(F1+2*F2+2*F3+F4+2*F5+F7);
forc[3*nodesNumb/4][2] = -(F1+2*F2+F4+2*F5);
if (nodesNumb != 16)
{
for (int i = 3*nodesNumb/4+2;i <= nodesNumb-4;i=i+2)
{
forc[i-1][2] = -(F1+2*F2+F3+F4+2*F5+F7);
}
}
if (nodesNumb != 16)
{
for (int i = 3*nodesNumb/4+3;i <= nodesNumb-3;i=i+2)
{
forc[i-1][2] = -(F1+2*F2+F3+F4+2*F5);
}
}
forc[nodesNumb-3][2]=-(F1+2*F2+F4+2*F5+F7);
forc[nodesNumb-2][2]=-(F1+F2+2*F3+F4+F5+F6);
forc[nodesNumb-1][2]=-(F2+F3+F4+F5);
double[] forces = MathOperations.reshape(forc, 3, nodesNumb);
return forces;
}
static int[] BoundaryCondition(int nodesNumb,double[] forces) {
int[][] ux = {{1, 0}, {nodesNumb / 2, 1}, {nodesNumb / 2 + 1, 0}, {nodesNumb, 1}};
int[][] uy = {{1, 0}, {nodesNumb / 2, 0}, {nodesNumb / 2 + 1, 0}, {nodesNumb, 0}};
int[][] uz = {{1, 0}, {nodesNumb / 2, 0}, {nodesNumb / 2 + 1, 0}, {nodesNumb, 0}};
int m[] = new int[10];
int p = 0;
for (int i = 0; i < 4; i++) {
if (ux[i][1] != 1) {
forces[3 * ux[i][0] - 3] = ux[i][1];
m[p] = 3 * ux[i][0] - 3;
p++;
}
forces[3 * uy[i][0] - 2] = uy[i][1];
m[p] = 3 * uy[i][0] - 2;
p++;
forces[3 * uz[i][0] - 1] = uz[i][1];
m[p] = 3 * uz[i][0] - 1;
p++;
}
return m;
}
}
Input.java
package ru.hse.android.diplom;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Input extends ActionBarActivity implements View.OnClickListener{
EditText editText;
EditText editText2;
EditText editText3;
EditText editText4;
EditText editText5;
EditText editText6;
Button button2;
public int num;
String idAlbum;
TextView textView8;
TextView textView9;
TextView textView10;
TextView textView11;
TextView textView12;
TextView textView13;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.input);
editText = (EditText) findViewById(R.id.editText);
editText2 = (EditText) findViewById(R.id.editText2);
editText3 = (EditText) findViewById(R.id.editText3);
editText4 = (EditText) findViewById(R.id.editText4);
editText5 = (EditText) findViewById(R.id.editText5);
editText6 = (EditText) findViewById(R.id.editText6);
button2 = (Button) findViewById(R.id.button2) ;
button2.setOnClickListener(this);
textView8 = (TextView) findViewById(R.id.textView8);
textView9 = (TextView) findViewById(R.id.textView9);
textView10 = (TextView) findViewById(R.id.textView10);
textView11 = (TextView) findViewById(R.id.textView11);
textView12 = (TextView) findViewById(R.id.textView12);
textView13 = (TextView) findViewById(R.id.textView13);
button2.setOnClickListener(this);
Bundle extras = getIntent().getExtras();
if (extras != null) {
idAlbum = String.valueOf(extras.getLong("id"));
num = Integer.parseInt(idAlbum);
textView8.setText(R.string.input_w);
textView9.setText(R.string.input_h);
textView10.setText(R.string.input_numSec);
textView11.setText(R.string.input_scale);
editText.setText("1", TextView.BufferType.EDITABLE);
editText2.setText("2", TextView.BufferType.EDITABLE);
editText3.setText("14", TextView.BufferType.EDITABLE);
editText4.setText("1", TextView.BufferType.EDITABLE);
switch (num) {
case 1:
editText5.setText("3", TextView.BufferType.EDITABLE);
editText6.setText("0.01", TextView.BufferType.EDITABLE);
textView12.setText(R.string.input_l);
textView13.setText(R.string.input_s);
break;
case 2:
editText5.setText("3", TextView.BufferType.EDITABLE);
editText6.setText("25000", TextView.BufferType.EDITABLE);
textView12.setText(R.string.input_l);
textView13.setText(R.string.input_p);
break;
case 3:
editText5.setText("0.01", TextView.BufferType.EDITABLE);
editText6.setText("25000", TextView.BufferType.EDITABLE);
textView12.setText(R.string.input_s);
textView13.setText(R.string.input_p);
break;
}
}
}
@Override
public void onClick(View v) {
Intent intent = new Intent(this, Result.class);
final String str1 = editText.getText().toString();
final String str2 = editText2.getText().toString();
final String str3 = editText3.getText().toString();
final String str4 = editText4.getText().toString();
final String str5 = editText5.getText().toString();
final String str6 = editText6.getText().toString();
intent.putExtra("width", str1);
intent.putExtra("hight", str2);
intent.putExtra("sections", str3);
intent.putExtra("scale", str4);
intent.putExtra("num", idAlbum);
switch (num) {
case 1:
intent.putExtra("length", str5);
intent.putExtra("area", str6);
break;
case 2:
intent.putExtra("length", str5);
intent.putExtra("payload", str6);
break;
case 3:
intent.putExtra("area", str5);
intent.putExtra("payload", str6);
break;
}
startActivity(intent);
}
}
Main.java
package ru.hse.android.diplom;
import java.util.Arrays;
public class Main {
public static double[] main(String num, String w,String sca, String h,String sec,String var1,String var2,int index ) {
int sc = Integer.parseInt(num);
double width = Double.parseDouble(w);
double hight = Double.parseDouble(h);
int scale = Integer.parseInt(sec);
int sectNum = Integer.parseInt(sca);
double VAR1 = Double.parseDouble(var1);
double VAR2 = Double.parseDouble(var2);
double modY = 2.10E+11,sigmaT = 6E+8;
int safetyFactor = 2,ro = 7800;
double Krit = sigmaT / safetyFactor;
int nodesNumb = 2 * sectNum + 4;
int[][] elements;
double[] forces,nodes,displacements;
double[]nodesNew=new double[3*nodesNumb];
double[] result =new double[1];
result[0] = 0;
double eps=0.5;
int taskType;
double length = 3;
double payload = 25000;
double crossSectionArea = 0.01;
System.out.println("Введите тип задания:");
switch (sc) {
case 1:
taskType = 1;
length = VAR1; crossSectionArea = VAR2;
nodes = Nodes.defineNodes(nodesNumb, hight, length, width);
elements = Elements.defineElements(nodesNumb);
forces = Forces.defineGravity(nodesNumb, hight, length, width, crossSectionArea, ro, Forces.g);
payload = 2000000;
do
{
displacements = Displacements.findDisp(nodesNumb,elements,nodes,crossSectionArea, modY,forces,payload);
double[] epsP = Forces.findEpsAndVar(Krit,payload,eps,taskType,elements,nodes,modY,displacements);
eps=epsP[0];
payload = epsP[1];
}while(eps>0.0001);
nodesNew = Nodes.lastNodes(displacements, nodes);
System.out.println(Arrays.toString(displacements));
System.out.println(Arrays.toString(nodesNew));
System.out.println(payload);
result[0] = payload;
break;
case 2:
taskType = 2;
length = VAR1;payload = VAR2;
nodes = Nodes.defineNodes(nodesNumb, hight, length, width);
elements = Elements.defineElements(nodesNumb);
crossSectionArea = 4000;
do
{
forces = Forces.defineGravity(nodesNumb, hight, length, width, crossSectionArea, ro, Forces.g);
displacements = Displacements.findDisp(nodesNumb,elements,nodes,crossSectionArea, modY,forces,payload);
double[] epsP = Forces.findEpsAndVar(Krit,crossSectionArea,eps,taskType,elements,nodes,modY,displacements);
eps=epsP[0];
crossSectionArea = epsP[1];
}while(eps>0.0001);
nodesNew = Nodes.lastNodes(displacements, nodes);
result[0] = crossSectionArea;
break;
case 3:
taskType = 1;
payload = VAR2;crossSectionArea = VAR1;
length = 76;
do
{
nodes = Nodes.defineNodes(nodesNumb, hight, length, width);
elements = Elements.defineElements(nodesNumb);
forces = Forces.defineGravity(nodesNumb, hight, length, width, crossSectionArea, ro, Forces.g);
displacements = Displacements.findDisp(nodesNumb,elements,nodes,crossSectionArea, modY,forces,payload);
double[] epsP = Forces.findEpsAndVar(Krit,length,eps,taskType,elements,nodes,modY,displacements);
eps=epsP[0];
length = epsP[1];
}while(eps>0.0001);
nodesNew = Nodes.lastNodes(displacements, nodes);
System.out.println(Arrays.toString(displacements));
System.out.println(Arrays.toString(nodesNew));
System.out.println(length);
result[0] = length;
break;
default:
System.out.println("Вы не ввели один из указанных номеров");
break;
}
if (index == 1)
{
return result;
}
else
{
return nodesNew;
}
}
}
MathOperations.java
package ru.hse.android.diplom;
class MathOperations {
static double maxInString(double[] mas)
{
double max = mas[0];
int x = 0;
for (int i = 0; i < mas.length; i++) {
if (Math.abs(mas[i]) > max) {
{
max = Math.abs(mas[i]);
x = i;
}
}
}
return max;
}
static double[] reshape(double[][] array, int str,int col)
{
int counter =0;
double[] newArray = new double[col*str];
for (int x =0;x < array.length;x++)
{
for (int y=0;y<array[x].length;y++)
{
newArray[counter] = array[x][y];
counter++;
}
}
return newArray;
}
static int[] reshapeInt(int[][] array, int str,int col)
{
int counter =0;
int[] newArray = new int[col*str];
for (int x =0;x < array.length;x++)
{
for (int y=0;y<array[x].length;y++)
{
newArray[counter] = array[x][y];
counter++;
}
}
return newArray;
}
}
Nodes.java
package ru.hse.android.diplom;
class Nodes {
static double[] defineNodes(int nodesNumb,double H,double L, double W)
{
double nodesArr[][] = new double[nodesNumb][3];
for (int i = 1; i <= nodesNumb/2 ; i=i+2) {nodesArr[i][0] = L*(i+1)/2;nodesArr[i][1] = 0; nodesArr[i][2] = 0;}
for (int i = 2; i < nodesNumb/2 ; i=i+2) {nodesArr[i][0] = L*i/2;nodesArr[i][1] = 0; nodesArr[i][2] = H;}
nodesArr[nodesNumb/2][1] = 1;
for (int i = nodesNumb/2 + 1; i <= nodesNumb ; i=i+2) {nodesArr[i][0] = nodesArr[i-nodesNumb/2][0];nodesArr[i][1] = W; nodesArr[i][2] = 0;}
for (int i = nodesNumb/2 + 2; i < nodesNumb ; i=i+2) {nodesArr[i][0] = nodesArr[i-nodesNumb/2][0];nodesArr[i][1] = W; nodesArr[i][2] = H;}
double[] nodes = MathOperations.reshape(nodesArr, 3, nodesNumb);
return nodes;
}
static double[] lastNodes(double[] movements,double[]Nodes)
{
double[] nodesNew =new double[movements.length];
for (int i=0;i<movements.length;i++)
{
nodesNew[i] = movements[i] + Nodes[i];
}
return nodesNew;
}
}
Result.java
package ru.hse.android.diplom;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.*;
import java.util.Arrays;
public class Result extends ActionBarActivity {
public int var;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.result);
String length;
String area;
String payload;
String num;
String width;
String hight;
String sections;
String scale;
double[] result = new double[1];
Intent intent = getIntent();
width= intent.getStringExtra("width");
hight=intent.getStringExtra("hight");
sections=intent.getStringExtra("sections");
scale=intent.getStringExtra("scale");
num = intent.getStringExtra("num");
var = Integer.parseInt(num);
int nodesNumb = 2 * Integer.parseInt(sections) + 4;
double h = Integer.parseInt(hight);
double w = Integer.parseInt(width) ;
int j = 1;
int i = 2;
switch (var) {
case 1:
length=intent.getStringExtra("length");
area=intent.getStringExtra("area");
double l = Integer.parseInt(length) ;
result = Main.main(num,width,sections,hight,scale,length,area,j);
double otvet = result[0];
Toast toast = Toast.makeText(getApplicationContext(),"Полезная нагрузкa" + Double.toString(otvet)
,Toast.LENGTH_LONG );
toast.show();
TextView myText4 = (TextView)findViewById(R.id.textView2);
myText4.setText("Результат " + otvet);
double[] nodes=Nodes.defineNodes(nodesNumb,h,l,w);
double[] nodesNew = Main.main(num,width,sections,hight,scale,length,area,i);
System.out.println(Arrays.toString(nodesNew));
int[][]elements = Elements.defineElements(nodesNumb);
Intent drw = new Intent (this, Drawing.class);
int[] elementsStr = MathOperations.reshapeInt(elements,elements.length,2);
drw.putExtra("nodes", nodes);
drw.putExtra("elementsStr", elementsStr);
drw.putExtra("nodesNew", nodesNew);
break;
case 2:
length=intent.getStringExtra("length");
payload=intent.getStringExtra("payload");
l = Integer.parseInt(length) ;
result = Main.main(num,width,sections,hight,scale,length,payload,j);
otvet = result[0];
toast = Toast.makeText(getApplicationContext(),"Площадь сечения" +Double.toString(otvet)
, Toast.LENGTH_LONG );
toast.show();
TextView myText2 = (TextView)findViewById(R.id.textView2);
myText2.setText("Результат " + otvet);
nodes =Nodes.defineNodes(nodesNumb, h, l, w);
nodesNew = Main.main(num,width,sections,hight,scale,length,payload,i);
System.out.println(Arrays.toString(nodesNew));
System.out.println(Arrays.toString(nodes));
System.out.println("222");
elements = Elements.defineElements(nodesNumb);
drw = new Intent (this, Drawing.class);
elementsStr = MathOperations.reshapeInt(elements,elements.length,2);
drw.putExtra("nodes", nodes);
drw.putExtra("elementsStr", elementsStr);
drw.putExtra("nodesNew", nodesNew);
startActivity(drw);
break;
case 3:
area=intent.getStringExtra("area");
payload=intent.getStringExtra("payload");
result = Main.main(num,width,sections,hight,scale,area,payload,j);
otvet = result[0];
toast = Toast.makeText(getApplicationContext(),"Длина секции" +Double.toString(otvet)
, Toast.LENGTH_LONG );
toast.show();
TextView myText3 = (TextView)findViewById(R.id.textView2);
myText3.setText("Результат " + otvet);
nodes = Nodes.defineNodes(nodesNumb,h,otvet,w);
nodesNew = Main.main(num,width,sections,hight,scale,area,payload,i);
elements = Elements.defineElements(nodesNumb);
elementsStr = MathOperations.reshapeInt(elements,elements.length,2);
drw = new Intent (this, Drawing.class);
drw.putExtra("nodes", nodes);
drw.putExtra("elementsStr", elementsStr);
drw.putExtra("nodesNew", nodesNew);
startActivity(drw);
break;
}
}
}
StiffnessMatrix.java
package ru.hse.android.diplom;
public class StiffnessMatrix {
static double[][] findStiffnessMatrix(int[][] elements, double[] nodes, double crossSectionArea,double modY,int nodesNumb)
{
double[][] K = new double[3*nodesNumb][3*nodesNumb];
for (int i = 0; i < elements.length; i++) {
int ni = elements[i][0];
int nj = elements[i][1];
int[] EFT = {ni * 3 - 3, ni * 3 - 2, ni * 3 - 1, nj * 3 - 3, nj * 3 - 2, nj * 3 - 1};
double xi = nodes[ni * 3 - 3];
double yi = nodes[ni * 3 - 2];
double zi = nodes[ni * 3 - 1];
double xj = nodes[nj * 3 - 3];
double yj = nodes[nj * 3 - 2];
double zj = nodes[nj * 3 - 1];
double dx = xj - xi;
double dy = yj - yi;
double dz = zj - zi;
double l = Math.sqrt(dx * dx + dy * dy + dz * dz);
double cx = dx / l;
double cy = dy / l;
double cz = dz / l;
double[][] matrix = {
{cx * cx, cx * cy, cx * cz, -cx * cx, -cx * cy, -cx * cz},
{cx * cy, cy * cy, cy * cz, -cx * cy, -cy * cy, -cy * cz},
{cx * cz, cy * cz, cz * cz, -cx * cz, -cy * cz, -cz * cz},
{-cx * cx, -cx * cy, -cx * cz, cx * cx, cx * cy, cx * cz},
{-cx * cy, -cy * cy, -cy * cz, cx * cy, cy * cy, cy * cz},
{-cx * cz, -cy * cz, -cz * cz, cx * cz, cy * cz, cz * cz},
};
for (int sch = 0; sch < matrix.length; sch++) {
for (int j = 0; j < matrix.length; j++) {
matrix[sch][j] *= (modY * crossSectionArea / l);
}
}
int index1 = 0;
int index2 = 0;
int x, y;
do {
x = EFT[index1];
do {
y = EFT[index2];
K[x][y] = K[x][y] + matrix[index1][index2];
index2++;
} while (index2 <= 5);
index2 = 0;
index1++;
} while (index1 <= 5);
}
return K;
}
static double[][]modifyK(int nodesNumb, int[][] elements,double[] nodes, double crossSectionArea, double modY,double[] applyGravity) {
int[] m = Forces.BoundaryCondition(nodesNumb,applyGravity);
double[][] K= StiffnessMatrix.findStiffnessMatrix(elements, nodes,crossSectionArea,modY,nodesNumb);
for (int j = 0; j < 3 * nodesNumb; j++) {
for (int k = 0; k < m.length; k++) {
if (j == m[k]) {
for (int i = 0; i < 3 * nodesNumb; i++) {
if (i == j) {
K[i][j] = 1;
} else {
K[j][i] = 0;
K[i][j] = 0;
}
}
}
}
}
return K;
}
}
Task.java
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.util.Log;
public class Task extends DialogFragment implements OnClickListener {
final String LOG_TAG = "myLogs";
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity())
.setTitle("Title!").setPositiveButton(R.string.OK, this)
.setMessage(R.string.message_text);
return adb.create();
}
public void onClick(DialogInterface dialog, int which) {
int i = 0;
switch (which) {
case Dialog.BUTTON_POSITIVE:
i = R.string.OK;
break;
}
if (i > 0)
Log.d(LOG_TAG, "Dialog 2: " + getResources().getString(i));
}
}
Размещено на Allbest.ru
Подобные документы
Основные численные методы моделирования. Понятие метода конечных элементов. Описание основных типов конечных элементов и построение сетки. Реализация модели конструкции в пакете ANSYS, на языке программирования C#. Реализация интерфейса пользователя.
курсовая работа [2,3 M], добавлен 22.01.2016Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.
курсовая работа [167,8 K], добавлен 18.01.2017Архитектура операционной системы Android. Инструменты Android-разработчика. Установка Java Development Kit, Eclipse IDE, Android SDK. Настройка Android Development Tools. Разработка программы для работы с документами и для осуществления оперативной связи.
курсовая работа [2,0 M], добавлен 19.10.2014Структура и архитектура платформы Android. Основные достоинства и недостатки операционной системы Android. Среда разработки Eclipse, платформа Java. Подготовка среды разработки. Вкладка "Погода", "Курс валют", "Новости". Просмотр полной новости.
дипломная работа [1,0 M], добавлен 11.07.2014Обзор существующих популярных программ для просмотра погоды на ОС Android. Операционные системы современных смартфонов. Ключевые особенности Android, технология Java. Разработка программной части, выбор языка, описание алгоритма, ее логической структуры.
курсовая работа [911,5 K], добавлен 16.04.2014Описание основных математических методов обработки эмпирических данных. Регрессионный метод и анализ ковариаций Ancova. Организация операционной системы, среды программирования на Android. Программная реализация метода 1МНК в среде С++ под Android.
дипломная работа [4,2 M], добавлен 23.03.2017Первое устройство, работающее под управлением Android. Приложения под операционную систему Android. Формат установочных пакетов. Разработка приложений на языке Java. Шаблоны основных пакетов и компонентов Android. Сборка приложений, основанная на Gradle.
курсовая работа [492,0 K], добавлен 08.02.2016Структура Android-приложений. Особенности игрового движка. Алгоритмизация и программирование. Список игровых состояний. Настройка, отладка и тестирование программы. Разработка руководства пользователя. Тестирование инсталляции и отображения элементов.
дипломная работа [4,5 M], добавлен 19.01.2017Разработка программного обеспечения для платформы Android версии 2.3: информационное приложения для поклонников футбольной команды, с возможностью просмотра событий, статистики и иной информации о команде и ее успехах. Листинг JsonDataManager.java.
дипломная работа [4,1 M], добавлен 24.04.2013Архитектура операционной системы Android, набор библиотек для обеспечения базового функционала приложений и виртуальная машина Dalvik. Объектно-ориентированный язык программирования Java как инструмент разработки мобильных приложений для ОС Android.
дипломная работа [1,6 M], добавлен 08.07.2015