DEV Community

Jaipal001
Jaipal001

Posted on • Edited on

Explaining donut like 5 years old Part-2

Matrix Multiply

To multiply singleRow and a matrix, in C we will create a function and in Java, we will create a public static function in Matrix

In C

singleRow multiply(singleRow m1, Matrix m2) {
    singleRow res;
    res.a1 = (m1.a1 * m2.a1.a1) + (m1.a2 * m2.a2.a1) + (m1.a3 * m2.a3.a1);
    res.a2 = (m1.a1 * m2.a1.a2) + (m1.a2 * m2.a2.a2) + (m1.a3 * m2.a3.a2);
    res.a3 = (m1.a1 * m2.a1.a3) + (m1.a2 * m2.a2.a3) + (m1.a3 * m2.a3.a3);
    return res;
}
Enter fullscreen mode Exit fullscreen mode

In Java

class Matrix {
  public static singleRow multiply(singleRow m1, Matrix m2) {
    singleRow res = new singleRow(0, 0, 0);
    res.a1 = (m1.a1 * m2.a1.a1) + (m1.a2 * m2.a2.a1) + (m1.a3 * m2.a3.a1);
    res.a2 = (m1.a1 * m2.a1.a2) + (m1.a2 * m2.a2.a2) + (m1.a3 * m2.a3.a2);
    res.a3 = (m1.a1 * m2.a1.a3) + (m1.a2 * m2.a2.a3) + (m1.a3 * m2.a3.a3);
    return res;
  }
}
Enter fullscreen mode Exit fullscreen mode

Main func. body

Let screen height = 22 and width = 80

total area = 1760

A = 0, B = 0
A is angle for rotation on X-axis, B is angle for rotation on Z-axis, when we rotate circle on Y-axis, it becomes donut
ϕ for Y-axis, θ for creating circle

create 2 arrays of 1760, 1 that stores donuts characters to print, other that stores z index maybe in double type

double zBuffer[1760];
char buffer[1760];
Enter fullscreen mode Exit fullscreen mode

create a new screen with printf("\x1b[2J");
and add infinite loop

while (1) {
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)