Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Rasturizer/Rasturizer.cpp
- Committer:
- el17cd
- Date:
- 2019-03-24
- Revision:
- 13:f4de03202477
- Parent:
- 12:b69657862610
- Child:
- 14:885915260e25
File content as of revision 13:f4de03202477:
#include "mbed.h"
#include "Rasturizer.h"
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Serial pc(USBTX, USBRX); // tx, rx
Rasturizer::Rasturizer(){
lcd.init();
}
void Rasturizer::drawHorizon(double angle){
lcd.drawLine(0,
21-rint(angle*50),
84,
21+rint(angle*50),
1);/*
double floorPoints[14][3] = {{-120,5, 5}, {-120,0, 1000}, {-80,5, 5}, {-80,0, 1000}, {-40,5, 5}, {-40,0, 1000}, {0,5, 5}, {0,0, 1000}, {40,5, 5}, {40,0, 1000}, {80,5, 5}, {80,0, 1000}, {120,5, 5}, {120,0, 1000}};//{-10,20, 10}, {-10,0, 100}, {0,20, 10}, {0,0, 100}, {10,20, 10}, {10,0, 100}, {20,20, 10}, {20,0, 100},{30,20, 10}, {30,0, 100}};
for(int i = 0; i < 14; i += 2){
lcd.drawLine(rint(floorPoints[i][0]*(40/floorPoints[i][2]))+42,
rint(floorPoints[i][1]*(40/floorPoints[i][2]))+21,
rint(floorPoints[i+1][0]*(40/floorPoints[i+1][2]))+42,
rint(floorPoints[i+1][1]*(40/floorPoints[i+1][2]))+21,
1);
}*/
}
void Rasturizer::drawFace(Face face, double angle){
double points[4][3];
for(int vertex = 0; vertex < 4; vertex++){
for(int axis = 0; axis < 3; axis++){
points[vertex][axis] = face.getVertexValue(vertex, axis);
}
double y = points[vertex][1];
double x = points[vertex][0];
points[vertex][0] = x*cos(angle)-y*sin(angle);
points[vertex][1] = y*cos(angle)+x*sin(angle);
}
if ((points[0][2] > 20 || points[1][2] > 20 || points[2][2] > 20|| points[3][2] > 20) && face.getVisible()){
int diffX1 = points[0][0]*(40/points[0][2])-(points[1][0]*(40/points[1][2]));
int diffY1 = points[0][1]*(40/points[0][2])-(points[1][1]*(40/points[1][2]));
int diffX2 = points[2][0]*(40/points[2][2])-(points[3][0]*(40/points[3][2]));
int diffY2 = points[2][1]*(40/points[2][2])-(points[3][1]*(40/points[3][2]));
double step = (double)diffY2/(double)diffX2;
double stepSmall1 = (double)diffX1/(double)diffX2;
double stepSmall2 = (double)diffY1/(double)diffX2;
pc.printf("%d\n", diffX2);
for(int s = 0; s< abs(diffX2); s++){
lcd.drawLine(rint((points[0][0])*(40/points[0][2])-stepSmall1*s)+42,
rint((points[0][1])*(40/points[0][2])-stepSmall2*s)+21,
rint((points[3][0])*(40/points[3][2])+s)+42,
rint((points[3][1])*(40/points[3][2])+step*s)+21, 0);
}
}
if((points[0][2] > 10 || points[1][2] > 10 || points[2][2] > 10|| points[3][2] > 10)){
for (int i = 0; i < 3; i++){
lcd.drawLine(rint(points[i][0]*(40/points[i][2]))+42,
rint(points[i][1]*(40/points[i][2]))+21,
rint(points[i+1][0]*(40/points[i+1][2]))+42,
rint(points[i+1][1]*(40/points[i+1][2]))+21,
1);
}
lcd.drawLine(rint(points[0][0]*(40/points[0][2]))+42,
rint(points[0][1]*(40/points[0][2]))+21,
rint(points[3][0]*(40/points[3][2]))+42,
rint(points[3][1]*(40/points[3][2]))+21,
1);
}
}
void Rasturizer::print(const char *text){
lcd.printString(text, 0, 0);
}
void Rasturizer::clear(){
lcd.clear();
}
void Rasturizer::refresh(){
lcd.refresh();
}