I need to get my network all sorted out. I have all the stuff bought, just need to switch over the phone jacks to network and get the switches in place.I installed a third 8-port switch in my local network.
Edit: Marching squares upgraded to marching triangles! No more ambiguous saddle points
<Nitpicky> Saddle points are still there in the underlying height map, the ambiguity disappears only for the height interpolation over the triangle. </Nitpicky> Looking forward to the code!
class Coordinate():
def __init__(self, x = None, y = None, z = None, radius = None, index = None, distance = None):
self.x = x
self.y = y
self.z = z
self.xyz = (x, y, z)
self.radius = radius
self.index = index
self.distance = distance
class HeightMap():
def __init__(self, flat, columns, rows, zmin, zmax, array, mapSize):
self.flat = flat
self.columns = columns
self.rows = rows
self.zmin = zmin
self.zmax = zmax
self.array = array
self.mapSize = mapSize
def fraction_to_meters(self, fraction):
m_value = fraction * (self.zmax-self.zmin) + self.zmin
return m_value
def coord_to_fraction(self, x, y, output='f'):
x+=self.mapSize/2
y+=self.mapSize/2
x_interval = self.mapSize / (self.columns-1)
y_interval = self.mapSize / (self.rows-1)
column = int(x//x_interval)
row = int(y//y_interval)
x1 = column*x_interval
x2 = (column+1)*x_interval
y1 = row*y_interval
y2 = (row+1)*y_interval
x_factor = (x-x1)/x_interval
y_factor = (y-y1)/y_interval
total_area = x_interval*y_interval
a_area = x_interval*(1-x_factor)*y_interval*(1-y_factor)
b_area = x_interval*x_factor*y_interval*(1-y_factor)
c_area = x_interval*(1-x_factor)*y_interval*y_factor
d_area = x_interval*x_factor*y_interval*y_factor
a_weight = a_area/total_area
b_weight = b_area/total_area
c_weight = c_area/total_area
d_weight = d_area/total_area
az = self.array[row][column]
bz = self.array[row][column+1]
cz = self.array[row+1][column]
dz = self.array[row+1][column+1]
z = az*a_weight+bz*b_weight+cz*c_weight+dz*d_weight
if output == 'm':
z = self.fraction_to_meters(z)
return z
class TriCell():
def __init__(self):
self.a = None
self.b = None
self.c = None
self.value = 0
def evaluate(self, elevation):
a = (self.a.z > elevation)*4
b = (self.b.z > elevation)*2
c = (self.c.z > elevation)*1
self.value = sum([a, b, c])
def interpolate(self, p0, p1, z):
dx = p1.x-p0.x
dy = p1.y-p0.y
dz = p1.z-p0.z
rel_z = z-p0.z
if dz == 0:
fraction = 0
else:
fraction = rel_z/dz
x = p0.x+dx*fraction
y = p0.y+dy*fraction
return Coordinate(x, y, z)
def line_coords(self, elevation):
lines = []
if self.value in (0, 7):
return lines
alfa = self.interpolate(self.a, self.b, elevation)
beta = self.interpolate(self.b, self.c, elevation)
gamma = self.interpolate(self.c, self.a, elevation)
if self.value in (1,6):
lines.append((beta, gamma))
elif self.value in (2,5):
lines.append((alfa, beta))
elif self.value in (3,4):
lines.append((alfa, gamma))
def contours(heightMap, size=100, _range=[-500,-500,500,500], step=None):
'''For marching squares'''
def make_cell():
'''Generates a single cell'''
ax = dx = columnStart+columnSize*column
ay = by = rowStart+rowSize*row
bx = cx = ax+columnSize
cy = dy = ay+rowSize
cell = Cell()
cell.a = Coordinate(ax, ay)
cell.b = Coordinate(bx, by)
cell.c = Coordinate(cx, cy)
cell.d = Coordinate(dx, dy)
for corner in (cell.a, cell.b, cell.c, cell.d):
get_corner_z(corner)
cells.append(cell)
def make_triangle_cell():
'''Generates two triangle cells'''
x0 = columnStart+columnSize*column
y0 = rowStart+rowSize*row
x1 = x0+columnSize
y1 = y0+rowSize
if row%2 == 0:
ax = bx = x0
cx = dx = x1
bx += columnSize*0.5
cx += columnSize*0.5
ay = dy = y1
by = cy = y0
else:
ax = dx = x0
bx = cx = x1
cx += columnSize*0.5
dx += columnSize*0.5
ay = by = y0
cy = dy = y1
a = Coordinate(ax, ay)
b = Coordinate(bx, by)
c = Coordinate(cx, cy)
d = Coordinate(dx, dy)
for corner in (a, b, d):
get_corner_z(corner)
cell1 = TriCell()
cell1.a = a
cell1.b = b
cell1.c = d
cells.append(cell1)
if cx <= hm.mapSize/2:
get_corner_z(c)
cell2 = TriCell()
cell2.a = b
cell2.b = c
cell2.c = d
cells.append(cell2)
def get_corner_z(corner):
'''Gets the z value for a cell corner'''
global zmax, zmin
corner.z = hm.coord_to_fraction(corner.x, corner.y, 'm')
if zmax is None or corner.z > zmax:
zmax = corner.z
if zmin is None or corner.z < zmin:
zmin = corner.z
#print(column, row, corner.x, corner.y, corner.z, sep='\t')
def print_cell_values():
for row in range(divRow):
this_row = []
for column in range(divColumn):
cellindex = row*divColumn+column
cell = cells[cellindex]
this_row.append(cell.value)
print(*this_row, sep='\t')
print('\n')
# 1. Calculate cell size
hm = heightMap
if _range == None:
r = hm.mapSize/2
_range = [-r, -r, r, r]
else:
for i in range(4):
if _range[i] < -hm.mapSize/2:
_range[i] = -hm.mapSize/2
elif _range[i] > hm.mapSize/2:
_range[i] = hm.mapSize/2
rowStart = int(_range[1])
rowEnd = int(_range[3])
rowLen = rowEnd - rowStart
columnStart = int(_range[0])
columnEnd = int(_range[2])
columnLen = columnEnd - columnStart
divRow = rowLen//size
divColumn = columnLen//size
rowSize = rowLen/divRow
columnSize = columnLen/divColumn
# 2. Sample the heightmap
cells = []
global zmax, zmin
zmin = None
zmax = None
for row in range(divRow):
for column in range(divColumn):
make_triangle_cell()
#make_cell()
#print(zmin, zmax)
# 3. subdivide range zmin, zmax to determine which lines to draw
if step == None:
lines, step, factor = subdivide(zmin, zmax, 10)
else:
lines, step, factor = subdivide(zmin, zmax, step=step)
#print(*lines, sep='\t')
# 4. Evaluate cells and get line coordinates
lineDict = {}
for elevation in lines:
lineDict[elevation] = []
for cell in cells:
cell.evaluate(elevation)
lineDict[elevation] += cell.line_coords(elevation)
return lineDict, zmin, zmax
def subdivide(p0, p1, subdivisions=3, step=None, _range=None):
'''Subdivides the distance p1-p0'''
def stepFinder(n, subdivisions):
'''Finds the step size'''
#Find if n is negative
sign = 1 - (n < 0)*2
#List containing the available step factors
factors = (1, 2, 2.5, 5)
#Extract significand and potencia
string = '%.1E' %(n/subdivisions)
[significand, potencia] = [float(s) for s in string.split('E')]
#Select step factor and return step size
stepFactor = min(factors, key=lambda x:abs(x-abs(significand)))*sign
step = stepFactor*10**potencia
return step, stepFactor
p0, p1 = sorted((p0, p1))
n = p1-p0
factor = None
if step==None:
step, factor = stepFinder(n, subdivisions)
if _range==None:
_range=(p0, p1)
r0, r1 = _range[0], _range[1]
offset = (r0//step)*step
my_list = []
i = 1
while float(format(offset+i*step, 'g')) < r1:
my_list.append(float(format(offset+i*step, 'g')))
i += 1
return my_list, step, factor
for elevation in lineDict:
coordinates = lineDict[elevation]
lines = [[a, b] for a, b in coordinates]
for i in range(len(lines)):
line = lines.pop(0)
start = line[0]
end = line[-1]
for other_line in lines:
other_start = other_line[0]
other_end = other_line[-1]
if (start.x, start.y) == (other_start.x, other_start.y):
other_line.reverse()
other_line += line[1:]
break
elif (start.x, start.y) == (other_end.x, other_end.y):
other_line += line[1:]
break
elif (end.x, end.y) == (other_start.x, other_start.y):
other_line.reverse()
line.reverse()
other_line += line[1:]
break
elif (end.x, end.y) == (other_end.x, other_end.y):
line.reverse()
other_line += line[1:]
break
else:
lines.append(line)
lineDict[elevation] = lines
Wonder why quality is so bad for this particular AUO AHVA panel in the Asus.
What you have in mind, a driving game like AC or a shooting game?No, I've never tried gaming at over 60Hz, I'm deliberating over what to try first...
I assume it's because there's only two products that use it, they've had basically no incentive to develop it, especially since people like me will buy it anyway. I've seen that video too, but I always knew I wouldn't be using it at full brightness (where the bleed is most visible) so I was willing to give it a go for myself.
Is it still quite visible on any dark images with lower brightness?
Panel lottery, not worth the hassle if reasonable already.On a completely black image you can see it around the edges, I won't lie, even at 20% brightness (which feels about right for me) I can see it if I look directly at it, but I can't see it in my peripheral vision. It's not great that the monitor has this flaw, of course, but given that there's nothing around right now that does everything this does and I spend very little time looking at the edge of my monitor when I play games, I'm happy to keep it. It's annoying, though, as this is quite literally the only flaw, but I knew what I was buying so I'm not exactly surprised and I know my odds of doing better next time are quite low as the bleed on this one is nowhere near as bad as some seen in the 20-monitor test video... And it's out of stock again which hardly helps.
And as I alluded to in my edit, I played Doom first and it's just amazing, with my GTX 1080 it runs at 120-144fps at 1440p with all of the settings turned up (except maybe MSAA, which I probably have at 4x instead of 8). Deus Ex: MD is less smooth, unfortunately, with the same settings as I was using at 1080p I get ~50fps at 1440p, but G-sync does make it much easier to tolerate. Forza Horizon 3 struggled to hit 60fps even at 1080p but in the areas in which it did, it can now hit 90fps and it looks extremely pretty, and as an added bonus there's no screen tearing when I drive through the city area, but the combination of the low frame rate and the physics engine being tied to the frame rate does make it feel like a Dreamcast game, which is weird as hell but not the monitor's fault, I am still on a 4690K after all and the game is barely optimised.
All in all, it's a huge upgrade for me (coming from a Dell U2312HM with pretty extreme bleed) and I love it.
Edit: I did actually try AC, but I forgot I had to change the refresh rate in the Nvidia control panel. Still, it does look incredible even at 60Hz with G-sync enabled.
Finally bought additional storage for my growing photo collection - two 3TB drives on the cheap that I've setup in RAID I. Gives me an extra TB over my previous setup and redundancy that is desperately needed when working with 10+ years of digital photos.
That being said, I do need to upgrade from my epic Phenom X3 someday