Sitat av
|d13m0b
Bra! Det er godt å få løst problemer selv også.
Så ikke svaret ditt før nå. Hva ble til slutt fremgangsmåten din?
Først laget jeg et helvetes rot der jeg brukte to løkker, en for positive og en for negative x-verdier (sylindrene står i xy-planet);
Kode
int c_space = 5; //Distance between the cylincders aligned on the y = 0 axis.
int cyl_x = 1;
int cyl_y = 1;
int cyl_z = 1;
//relationship between breadth and location along y-axis:
int b = 0;
int numCol = (box_w2) / c_space;
for (int i = 0; i < numCol; i++) {
// if ((i%2) != 0){
// }
float num_c0 = box_h / c_space - i / 2;
float yPos = -c_space / 2 - (c_space / 2) * i + box_h / 2;
float xRowPos = c_space / 2 * i;
for (int c0_Num = 0; c0_Num < (num_c0); c0_Num++) {
GameObject cylinders = GameObject.CreatePrimitive (PrimitiveType.Cylinder);
cylinders.transform.localScale = new Vector3 (cyl_x, cyl_y, cyl_z);
cylinders.transform.position = new Vector3 (xRowPos, yPos, 0);
cylinders.transform.eulerAngles = new Vector3 (90, 0, 0);
yPos -= c_space;
}
}
Det så jævlig ut, funket ikke særlig bra og ja. I stedet for å ha bredde, høyde og en felles "mellomrom"-parameter separerte jeg c_space til henholdsvis deltaX og deltaY og brukte antall rekker som dimensjoneringsparameter:
Kode
public int dX = 4;
public int dY = 4;
public int n = 20;
public int cyl_scale = 1;
public int sysBreadth = 2;
public float spawnY = 20;
void Start() {
// Generating cylinders.
// Dependent on deltaX / dX
// Dependent on deltaY / dY
// Dependent on numberRows / n
// Dependent on scale of cylincers, cyl_scale
// Dependent on breadth of system, sysZ;
// Geometry of system defined by dX, dY and n
// Origo set at center height of system.
// Top -> Height = deltaY * numberRows.
// = 0.5*(dY * n)
int y;
int x = 0;
int z = 0;
for (int i = 0; i < n; i++) {
y = (dY * (n - 1)) / 2 - (1 / 2) * dY - i * dY;
for (int j = 0; j < (i+1); j++) {
x = - dX / 2 * i + dX * j;
GameObject cylinders = GameObject.CreatePrimitive (PrimitiveType.Cylinder);
cylinders.transform.position = new Vector3 (x, y, z);
cylinders.transform.localScale = new Vector3 (cyl_scale, cyl_scale, cyl_scale);
cylinders.transform.eulerAngles = new Vector3 (90, 0, 0);
}
}
Veggene var det jo så bare å dimensjonere i henhold til disse igjen. Ble visst mye enklere når jeg ryddet litt i strkturen:
Kode
// From this we know that a triangle ABC(counterclockwise, starting bottom left) is formed with coordinates intersecting outer cylinder-centre:
// A(bottom left) = (-dX/2)*(n-1);
// B(bottom right) = (dX/2)*(n-1);
// C(top) = dY(n-1)/2;
// Based on this we want to determine the angle and length of the side walls.
// PYTHAGORAS: Height and width of side triangle squared, added and squarerooted.
// Divided into parts for readability.
// Dimensions (sides of triangle):
float height = dY * (n - 1);
float halfTriangleWidth = (dX / 2) * (n - 1);
// Squaring of sides:
float heightSquared = Mathf.Pow (height, 2);
float halfTriangleWidthSquared = Mathf.Pow (halfTriangleWidth, 2);
// SquareRoot for finding Hypotenuse:
float lengthWalls = Mathf.Sqrt (heightSquared + halfTriangleWidthSquared);
// ANGLE: ArcSin on opposite side (height) and hypthenus (length of sideWalls), followed by conversion to degrees.
float radiansWalls = Mathf.Asin (height / lengthWalls);
float angleWalls = 360 - (radiansWalls * Mathf.Rad2Deg);
// Positioning of walls. Triangle centered about Y = 0, making the position of the walls the same as triangle-width/2:
int xPosRightWall = ((dX / 4) * (n + 1));
int xPosLeftWall = xPosRightWall * (-1);
Er egentlig første dings jeg programmerer selv, tror nesten jeg hadde det litt gøy underveis. Jævla nørdete.
...Hvis du lurer på hvorfor jeg deklarerer public så er det for å kunne endre på "brettet" uten å gå inn i scriptet.
Når jeg først har min egen tråd her; er det noen måte å speede frames på? Det skal dette baller ned fra toppen, som igjen (i teorien) skal normalfordeles. For at det skal skje må de selvsagt ikke spawne så tett at de kolliderer, noe som igjen gjør at en simulering tar en times tid.
Kan jeg få ballene til å dette fortere uten å påvirke fysikkens "lover" i programmet? Fast-forward kinda.
Sist endret av Tøffetom; 2. september 2015 kl. 21:47.
Grunn: Automatisk sammenslåing med etterfølgende innlegg.